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

淩亂°似流年 2022-08-08 14:42 343阅读 0赞
  1. #include<stdio.h>
  2. int main( )
  3. {
  4. unsigned int a = 6;
  5. int b = -20;
  6. (a + b > 6) ? printf(">6") : printf("<=6");
  7. return 0;
  8. }

整形(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

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

一道经典小题:

Center

输出为: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:

20150916202010167

如果 x、y、z指向同一地址:8

只有两个相同的情况:x与y(5),x与z(5),y与z(6)

指向地址均不相同:4



发表评论

表情:
评论列表 (有 0 条评论,343人围观)

还没有评论,来说两句吧...

相关阅读