首页 > 解决方案 > 为什么在减去两个无符号短裤时会收到“从'int'转换为'short unsigned int'可能会改变其值”警告

问题描述

我收到此警告

warning: conversion to ‘short unsigned int’ from ‘int’ may alter its value [-Wconversion]
unsigned short spaceEmpty = 10 - spaceFilled; 

从这些代码行

unsigned short spaceFilled = num_items(aisle, j);
unsigned short spaceEmpty = 10 - spaceFilled; 

有谁知道为什么会这样?num_items 返回一个无符号的 short,并且 spaceFilled 已正确初始化。

那么为什么在 spaceEmpty 中执行算术运算会给我一个警告呢?

标签: c

解决方案


由于在进行算术运算之前发生了操作数的算术转换,因此表达式10 - spaceFilled具有类型。int

然后将其分配intunsigned short,这会导致警告。

有两个部分会影响最终类型:

  • 10文字是类型int。因此,该操作将采用至少该大小的类型
  • spaceFilled, 比int, 至少 晋升 到int.

因此,即使您替换10(unsigned short)10,您仍然可以将操作数提升为int.


推荐阅读