unsigned int a=65535; printf("%d",a); 既然无符号 为什么结果是 -1呢?

来源:百度知道 编辑:UC知道 时间:2024/05/18 00:35:02
问题是为什么 -1 无符号不是都是正的吗
111111111111111111111111 在内存里16个1 头一位是符号位 1代表负
但之前定义了无符号 就应该正啊
还有-1是十进制数 那65535这又叫什么数
下楼的 还有-1是十进制数 那65535这又叫什么数

负数的二进制最高位为 1

假如说 int 能表示的最大值是0~10,
那么11的话也会表示 1,其余部分溢出了,
如果是-1的话,因为其没有负数, 所以就是最大的 10-1=9 ,
跟上面的65535是一个道理...

printf没有类型检查是C语言的缺陷之一。
int 类型使用 %d输出
unsigned int 应当使用 %u 输出
在内存里无所谓正负,反正就是一些0/1。
printf把它解释成 有符号数,无符号数,甚至浮点数。

%d是有符号的参数~你试试%ud

超出了int的范围了。