整型的比较


环境: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值