我试图运行以下代码,但与这里发生的事情混淆:
int main()
{
/*
a = -1;
b = 0xffffffff;
*/
if(-1 == 0xffffffff )
printf("-1 is equal to maximum\n");
else
printf(" -1 is not equal to maximum\n");
if(0xff < -1)
printf(" Less than -1 \n");
if(0xff < 0xffffffff)
printf(" Less than maximum\n");
Run Code Online (Sandbox Code Playgroud)
我也尝试了注释部分,用"a"替换-1,用"b"替换0xffffffff但结果相同.
这是32位系统所以我采用整数大小4字节.
我的输出是:
-1 is equal to maximum
Less than maximum
Run Code Online (Sandbox Code Playgroud)
如果-1等于最大值,那么它应该执行最后两个if语句.但它没有发生.为什么?
我将从C++中引用它; 我认为对C来说是一样的:
文字-1总是一个signed int.
文字0xff是一个signed int,但是0xffffffff是unsigned int.
在比较混合符号时,两个操作数都转换为无符号,解释所有结果.
这是关于C++ 11,表6中的裸整数文字类型(即没有类型后缀)的规则:
十进制文字是最小的类型int,long int或者long long int,无论哪种适合.
十六进制文字是最小的类型中int,unsigned int,long int,unsigned long int,long long int,unsigned long long int,取其适合.
再说一遍:
在您的第一次比较中,双方都转换为unsigned int,给出价值0xFFFFFFFF.
在第二个比较中,两个术语都是有符号整数,左边是术语255,右边是-1.
在第三个比较中,两个术语都转换为unsigned int.
请注意,我们永远不必担心这个问题的签名的硬件实现.唯一相关的平台相关的值的大小int,当我们宣称我们使用0xffffffff不适合的int,但不适合的unsigned int.
| 归档时间: |
|
| 查看次数: |
6237 次 |
| 最近记录: |