无符号数与有符号数相比

无符号数与有符号数相比较

先来看一段代码

#include<stdio.h>
int i = 0;
int main()
{
i–;
if(i>sizeof(i)){
printf(">\n");
}
else{
printf("<\n");
}
return 0;
}

这段代码的输出结果是什么?

结果出乎意料:>

缓缓地打出三个问号 ???

下面就来分析一下问什么会出现这种情况

i = 0;(初始值)
i = -1;(i–执行后)
sizeof(i) = 4;
那么就是判断(i > sizeif(i) = 4)?
i= -1 已经是不能改变的,那么问题就一定出现在(sizeof()函数上)
经过查询,可以发现sizeof()函数的返回值是无符号整型,那又能说明什么呢?
i = -1; i 是一个有符号数;而sizeof()返回值是无符号数,结果是i > sizeof(i),那么至此。可以得出一个结论:

当无符号数和有符号数进行运算时,会将所有的数都当作无符号数来运算

我们知道,数据在内存中是以二进制补码的形式存储的,-1是有符号数,所以它的最高位符号位必定是1,当它和sizeof(i)比较时,会将它当作无符号数进行比较,即将它所有的二进制序列当作数值位,那么将会是一个非常大的数,所以就会出现上面的结果。

破案了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值