以下代码:
unsigned char result;
result = (result << 4 );
Run Code Online (Sandbox Code Playgroud)
使用gcc版本4.6.4(Debian 4.6.4-2)编译,带有-Wconversion标志会导致警告
警告:从'int'转换为'unsigned char'可能会改变其值[-Wconversion]
这是为什么?
因为标准是这样说的.二元运算符的操作数经过整体推广,其中小于a的任何东西
int都被提升为int; 操作的结果也有类型int.如果原始值是,例如,
0x12结果将是0x120,并且将其分配给
unsigned char将导致值的变化.(指定的值将是0x20.)警告.
编辑:
从标准(§5.8Shift操作符):"操作数应该是整数或无范围的枚举类型,并且执行整数提升.结果的类型是提升的左操作数的类型." 与其他二元运算符不同,
不需要从两个运算符中找到一个公共类型:结果类型是左操作数的周期类型.但整体推广确实仍时有发生:在unsigned char将晋升为int(或者unsigned int,如果int有一个大小为1).
| 归档时间: |
|
| 查看次数: |
2650 次 |
| 最近记录: |