c - 为什么在减去两个无符号短裤时会收到“从'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 中执行算术运算会给我一个警告呢?
解决方案
由于在进行算术运算之前发生了操作数的算术转换,因此表达式10 - spaceFilled
具有类型。int
然后将其分配int
给unsigned short
,这会导致警告。
有两个部分会影响最终类型:
10
文字是类型int
。因此,该操作将采用至少该大小的类型spaceFilled
, 比int
, 至少 晋升 到int
.
因此,即使您替换10
为(unsigned short)10
,您仍然可以将操作数提升为int
.
推荐阅读
- python - 在 django 中覆盖 UserChangeForm
- c - C scanf第二次跳过
- c++ - cygwin_exception::open_stackdumpfile:将堆栈跟踪转储到 class4.exe.stackdump
- php - 使用 unix 选择上个月的行
- ios - Swift 4.2 类型“NSAttributedString.Key”没有成员“accessibilitySpeechPitch”
- vb.net - 如何在 Visual Basic 中跨类共享变量?
- html - 如何以特定角度将 CSS 转换应用于 div 元素?
- android - RecyclerView 没有在片段中显示任何内容
- ios - 如何随着时间的推移永久保存文本行
- html - 下拉菜单使用 CSS 离开屏幕