44问答网
所有问题
在C语言中,unsigned int a=65535 ; …………;printf("a=%d",a); 为什么输出结果a=-1
如题所述
举报该问题
推荐答案 2011-07-01
a的类型是不带不符号,也就是说有一个变量为a的box中装入了一个数据,而printf中的%d又将a作为带符号数显示,在其他未明确指出时,a显示是一个不带符号数,而你使用了%d要求将a作为带符号数显示,那么显然显示的结果是-1,也就是说,如果a=95,printf("a=%c",a);则会显示成字符a呢!
温馨提示:答案为网友推荐,仅供参考
当前网址:
http://44.wendadaohang.com/zd/GKDV3Y3WG.html
其他回答
第1个回答 2011-07-01
65535二进制应该是全1或者说全F,-1在有符号数中表示就是全F
-1 的二进制表示最高位为1(符号位,为1表示负),最低位为1
内存表示是补码,即原码取反加1,取反符号位不变,就变成了最高位为1最低位为0中间全为1,再加上1,就全为1了
我说明白了吧
本回答被网友采纳
第2个回答 2011-07-01
unsign int 的65535和,int型的-1,在内存中的,存储格式是一样的。你用%u,输出就是65535了。似乎,是用补码存储的。你可查相关资料,还没懂欢迎追问。
第3个回答 推荐于2017-11-17
在16位的C
编译器
中,unsigned int a=65535;存储形式为16位全1。
而当它以16位有符号整数格式解读时,因为其最高位为1,于是按16位补码被解读为一个负数-1。
本回答被网友采纳
相似回答
unsigned
int
a=65535
printf(
"
a=%d
"
,a)
为什么
输出为a=-1
答:
难道你是用的TC?呃……你看看sizeof
(int)
是多少,现在都是4,所以int 和 long 一样。再说也该用%u输出呀!如果按2个字节算:
65535=
1111111111111111% 按
%d(
有符号) ,先最后十五位取反得000000000000000, 再加1得1,加上负号,所以就得-1....
...{
unsigned
int
a=65535; printf(
"
a=%d
\n"
,a);
} 运算结果 a=-1...
答:
这段程序假设
unsigned
int占2个字节,16位。具体分析如下:无符号数65535即二进制1111 1111 1111 1111,所有位都是数值位。而输出时,并没有对a进行修改,而是将1111 1111 1111 1111
(65535),
当作有符号数时,最高位被具体看作符号位了,所对应的有符号数就是-1,应该将
printf
中的%d改成%u即可,。
unsigned
int
a=65535; printf(
"
%d
"
,a);
输出应该是-1
为什么
我用visual...
答:
short
a = 65535;printf(
"%d"
, a);
因为在VC6
中,int
占4个字节(32位),short占2个字节(16位)。
...{ short int
a=65535; printf(
"
a=%d
\n"
,a);
} 运行结果为a=-1...
答:
这是01码的问题,你要了解负数是如何用01表示的。恰巧如果将
65535
强制赋值给a的话会超出16位,但是没超出的部分恰巧是-1,打印的时候就给读出来了 书上这个例子是用在说明补码原码这一块的吧,好好看看书,肯定就明白了
大家正在搜
相关问题
有一例题如下: main() { unsigned int ...
unsigned int a=65535; printf("...
#include<stdio.h> main() {unsi...
void main() { unsigned int a=6...
int a=65535,int b=-1,printf("%...
C语言 main() { int a=9; a+=a-=a+...
unsigned int a=65535 a=%d 输出...
定义unsigned int a=65535; %d输出-1...