有关C语言的赋值问题

来源:百度知道 编辑:UC知道 时间:2024/09/20 02:37:09
unsigned int a=65535;
int b;
b=a;
printf("%d",b);
我想问为什么 输出的b的值是-1 。

懂的补码吗
unsigned int a=65535;无符号数65535 把内存空间占满了 也就是16个1(二进制)
这时赋予一个有符号数 那么b也存16个1 这时 第一位就有意义了 是符号为 1为负数 0为正数 负数的补码求法是 变成二进制 添加符号位第一位为1
出符号为 安位取反得反码 加1 得补码
也就是说
[1111111111111111]补码->[1111111111111110]反码->[1000000000000001]源码=
-1 减1得反码 按位取反

因为超过了最大范围,所以在相应的值范围内,反转,不明白加我百度HI

晕,溢出了嘛。
你的变量a定义的是无符号整形,但是你赋值超出了该类型的范围。

运行溢出而已

数据类型不同以致编译出错