整型的比较

来源:互联网 发布:网络终端机 远程桌面 编辑:程序博客网 时间:2024/06/05 17:50


环境:32位

 

遇到一个问题,就是在比较 -1和1U的时候,-1>1U。
特别是遇到的signed或者unsigned的时候,就更显得有点晕。


于是有了下面的小结,如果有问题的话希望大家能够指出,谢谢。

 

[K&R]中有这么一句话“在有符号值与无符号值之间的比较运算中,与机器相关,结果取决于机器中不同数据类型的大小”,看完之后有点不明白,于是,把书中的例子运行了一下,发现的确返回一个“比较大的正数”。但书中没有说具体的算法和原因。

 

其实应该是这样的:

当有符号值和无符号值之间进行比较时,需要进行类型转换,但从谁向谁转换呢?答案是有符号值向无符号值转换。

C语言中,是根据最大值来决定类型,即两个数值比较时,如果需要进行类型转换,转换方向为向类型所能表示数值范围大的。

 

例如,如果超出int型所能表示的范围,则用比int型大的最小类型来表示(unsigned int, long 或者unsigned long)。

 

这样,如果int与unsigned int进行比较,需要将int类型转换为unsigned int类型。

例如:
int t1 = -1;
int t2 = 1U;

t1在计算机中用补码表示为0xffffffff,转换为unsigned int类型为oxffffffff,十进制为4294967295,因此比1U要大。

 

各种整型范围的比较:

char(signed char)<unsigned char<short int(signed short int)<unsigned short int<int(signed int)<unsigned int<long int(signed int)<unsigned long int

原创粉丝点击