C语言#include<iostream> using namespace std; int main()

#include<iostream>
using namespace std;
int main()
{
int a=-1;
printf("%u\n",a);
return 1;
}

A、-1
B、65535
C、4294967295
D、0

答案是C为什么呢?这个代码是什么意思?

%u是unsigned,无符号,就是没有正负之分,只有正数,负数也当作正数处理。
这里的范围是一个环状的,-1的无符号型并不是1,而是2^32-1,其原因:
首先,unsigend int范围是0~(2^32)-1
有符号时:——————————————
…… -1 0 ……
无符号时:——————————————
0 1 2 ………… | |
4294967294 4294967295(==-1)
也就是说,-1原先在0的左边,在整形负数中最靠近0,但是一旦负号不存在,-1就被丢到了后面,-1的unsigned值自然是unsigned int的最大值4294967295。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-12-09
定义了一个有符号整形a=-1,在第二行是用printf以无符号整形输出
a在内存中二进制表示为11111111111111111111111111111111
以无符号整形输出则会解析为一个无符号整型即为4294967295本回答被网友采纳
第2个回答  2019-04-23
u是unsigned,无符号,就是没有正负之分,只有正数,负数也当作正数处理。
这里的范围是一个环状的,-1的无符号型并不是1,而是2^32-1,其原因:
首先,unsigend int范围是0~(2^32)-1
有符号时:——————————————
…… -1 0 ……
无符号时:——————————————
0 1 2 ………… | |
4294967294 4294967295(==-1)
也就是说,-1原先在0的左边,在整形负数中最靠近0,但是一旦负号不存在,-1就被丢到了后面,-1的unsigned值自然是unsigned int的最大值4294967295。
相似回答