0<0x80000000与0x80000000是32位有符号整型最小值的随记

来源:互联网 发布:牛贝 微信淘宝客 编辑:程序博客网 时间:2024/05/16 11:35
关于0<0x80000000与0x80000000是32位有符号整型最小值是否冲突作一点记录。
在C/C++中,0x80000000是32位有符号整型的最小值,32位有符号整的范围是 -2147483648到2147483647,但是当在程序中直接引用0x80000000时,其会按原码计算,此时其对应的字面常量值为2147483648 ,超出了int32位整数的范围,根据16进制的转换关系超出范围部分的自动转换为unsigned int,于是在程序中直接引用0x80000000,其值为2147483648,故在一些例子中,如0<0x80000000会判断成立。进一步延伸,此时不止是0x80000000,介于0x80000000与0xffffffff之间的任一以十六进制表示的数均是unsigned int型,其值均为大于0的常数。
上述与0x80000000是32位有符号整 的最小值这一事实并不冲突,在其作为32位有符号整的最小值时,经常有如下例子const int a=0x80000000,在此时已经将变量a确定为了有符号的int型变量,故在将0x80000000赋给a时,0x80000000会被当作一个负数,其被视作事实上的补码进行处理,故在输出a时,其值为-2147483648,在0<a时,也将会判定为false。
故这个问题的本质在于直接输入大于0x80000000的数时,计算机将其处理为原码而非补码。
阅读全文
1 0
原创粉丝点击