关于无符号整数的加法

请看下面这段代码:

#include<stdio.h>
int main()
{
    int a=-2;
    unsigned int b=1;
    if(a+b>=0)
      printf("1 ");
    else 
    printf("0 ");
      printf("%d ",a+b);
     printf("%u",a+b);


    return 0;
}

运行结果:
1 -1 4294967295
那么大家有没有疑问呢?
a+b的值明明是-1小于0,怎么会输出1呢?
其实在你没有指定类型输出a+b的值时它默认是取%u来进行输出的,也就是我们看到的第三个结果429467295,那么这个值又是怎么来的呢?
我们都知道int类型的数据都是占用4字节的内存,也就是32个比特,所以对于无符号整数它的取值范围是0~2^32-1,当我们用%u进行-2+1的运算时,编译器会先计算出%d的时候的结果-1,然后对-1取它的补码,也就是我们看到的这个很大的数字2^32-1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值