初学者遇到这样的问题
代码:
#include <stdio.h>
int main()
{
unsigned int j=-1;
printf("j=%u\n",j);
}
运行出来的结果是4294967295
但难道不应该是1嘛?
%u就是无符号十进制整数
unsigned int 范围是 0 到 4294967295 你j=-1超出范围了;
unsigned int是无符号整数型 范围是 0 到 4294967295
二进制是00000000 00000000 00000000 00000000 到 1111111111 1111111111 1111111111 1111111111
你j=-1超出范围了;
-1 二进制补码就是 1111111111 1111111111 1111111111 1111111111
转成无符号整数型unsigned int 也就是 4294967295
相当于4294967296-1 等于 4294967295
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
既然是unsigned那么 j就是一个无符号型变量,但是你将有符号型数字-1副值给它,定然认为-1的补码是一个无符号型数字。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!