有符号整数与无符号整数相加问题


#include<stdio.h>
int main( )
{
    unsigned int a = 6;
    int b = -20;
    (a + b > 6) ? printf(">6") : printf("<=6");
    return 0;
}





整形(int)和无符号整形相加时,int先转化为unsigned int,b在内存中以-20的二进制补码形式存储。

执行a+b时,b要以unsigned int的形式读取内存中的数据,即将-20的补码按照unsigned int的形式理解读取(4,294,967,276)

也即:b = -20;先转化为 -20 + 2^32 = 4,294,967,276(unsinged int);此时与 a = 6相加必然大于 6


无符号数与有符号数做加法运算,先将有符号数转化为无符号数,然后做运算



一道经典小题:



输出为:1、0、2


little endian指低位字节排放在内存的低地址端(就是起始地址)
long long 占8个字节,假设起始地址是0,一个地址存一个字节,按照地位编址1,2会按照如下方式存储

地址 0 1 2 3 4 5 6 7 8 ...
内容 1 0 0 0 0 0 0 0 2 ...

%d只能按照四字节连续输出
那么第一个输出的便是0001=1 第二个输出0000=0 第三个输出0002 



经典题3:


如果 x、y、z指向同一地址:8
只有两个相同的情况:x与y(5),x与z(5),y与z(6)
指向地址均不相同:4






  • 10
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值