%x,-1,ffffffff为什么用f表示?

作者&投稿:门京 (若有异议请与网页底部的电邮联系)
char c = -1; printf("%x\n",c);为什么是ffffffff而不是ff?~

好吧,哥哥,您的追问精神让我感动了,小弟斗胆献上一计,请君笑纳:

(1)就用VC++6.0建立一个C++工程吧,写上如下代码:

(2)然后按下键盘上的F10,进行单步调试运行,右键单击代码区,在弹出的菜单中选择“Go To Disassembly” 进入汇编代码模式:

(3)可以看到c的真实内存值哦~!



小弟献丑了~! ^ ^

这个结果是
2^32-1=1111..... 32个1 那么转化成16进制就是8个f

1111 -》f
1110-》e
1101-》d
1100-》c
1011-》d
1000-》a
0111-》9

%x,就是让这个数以十六进制的形式表示出来,-1的十六进制就是ffffffff,你的编译系统应该是32位的,一个f就是4个位,8个f,就是32位了,在计算机中,负数是以补码表示的,1的十六进制为0x01,把它按位求反加一,可得到-1,即1...1,总共32个1,就是8个f;

1,2,3,4,5,6,7,8,9到后面就是a,b,c,d,e,f代表10,11,12,13,14,15,十六进制就是这样的,二进制就用1,0表示。

你想问的是什么?能不能说的清楚一点
ffffffff是十六进制的表示方法


unsigned int x = 0; 请问 x - 1 的值是多少,并说明原理,谢谢。_百度...
1的反码是 11111111 11111111 11111111 11111110 反码加1是补码: 11111111 11111111 11111111 11111111 x = 0: 00000000 00000000 00000000 00000000 x -1 = 00000000 00000000 00000000 00000000 + 11111111 11111111 11111111 11111111 得: 11111111 11111111 11111111 11111111 写成16进制是 0xffffffff...

main(){ char x=0xFFFF; printf("%d ",x--); }
main(){char x=0xFFFF;printf("%d\\n",x--);}答案为-108.我想知道算的过程 main(){char x=0xFFFF;这里将16进位制的数赋值给char 型的 被系统型别转换了 printf("%d\\n",x--);}这边的你懂得 我用vc6++输出的-1,不同的编译系统不一样吧 这个里面比较复杂了 main() { char x...

unsigned int x=0xFFFF;x等于多少
x = 65535; 数字以 0x 开头,就是16进制数据。如果是 short x = 0xFFFF; x = -1;因为 x 是有符号的数据,最高位为1,表示x是一个负数,而负数是补码形式,所以结果是 -1.

C# 0XFFFF 如何转化为 -1?
你为什么会认为FFFF=-1?如上所示,我认为-1应该等于FFFFFFFF;而这个值类型为Uint;查看MSDN的整数数值类型(C#参考)后,得知:它是0至4,294,967,295的 无符号32位整数 ,因此-1不是Uint中的值;而可以用-1表示FFFFFFFF可能是由于算数溢出 你用FFFF+1得出65536就知道它不是-1 如果你要接收...

C语言 char x=0xFFFF 代表什么??
0xFFFF,是16进制的 FFFF, 转化成二进制就是 1111 1111 1111 1111(2 * 8 = 16 位,2字节)但是因为char型只占用1个字节,所以也就只有有效的0xff,并且因为是默认有符号数的,所以最高位1表示负数,剩下的就是-1了,根据补码定的规则0xFF是十进制-1....

C语言中“~”按位取反~2的值为何是-3
C语言中“~”按位取反~2的值为何是-3 按位取反就是0换成1,1换成0. 2的2进位制是0000...0010,取反后就是1111...1101,就是-3. (ffff是-1,fffe是-2,fffd是-3)c语言按位取反~ 对于16位机子,4的2进制表示如下 00000000 00000100 取反后为 11111111 11111011 即-5 ...

java中FFFFFFFF为什么是-1
也就是说FFFFFFFF即为-1 PS:我是看了楼上 聂鑫 给出的博文,看明白了后终于想清楚了。想清楚了之后才想出答案是如此。PPS:首位是符号位,计算正负的时候取反即得相应负正,但是计算反码补码时取反是不算符号位的,即如博文中所说1XXX XXXX取补码时是XXX XXXX取反,符号位1不取反。

...printf("%d,%x\\n",a,a); 结果为-1,ffffffff 这是为什么呢?
-1是十进制,ffffffff是十六进制,它们都是-1或都是ffffffff的意思,是相等的,只是写法不同。至于4294967295为什么变成了-1,这是由于一个4字节的二进制空间能表示的最大正数是4294967295,也就是十六进制FFFFFFFF,而这个数恰是有符号数的-1,因为%d是要求按有符号数输出的意思。

main(){ char x=0xFFFF; printf("%d \\n",x--); }
十六进制的F转化为二进制就是1111,所以这个0xFFFF,就是1111 1111 1111 1111也就是十进制的65535。char型不能直接拿来运算,这里输出是整型,所以报错,返回值是-1.好像记得越界或者什么错误的返回值都是-1,-1在这里不代表计算结果。

什么是一个数的原码,反码,补码
负数的原码最高位为1,其他位为整数的绝对值(零有+0、-0之分)。负数的反码最高位为1,其他位为整数的绝对值按位取反(零有+0、-0之分)。负数的补码最高位为1,其他位为整数的绝对值按位取反再加一(零没有+0、-0之分,最常用)。比如-1的原码为0x80000001,反码为0xFFFFFFFE,补码...

伊吾县19895686303: printf("%x", - 1);输出结果为ffffffff.求解释. -
正炎奥普: %x是十六进制,ffffffff是十进制-1的补码,取反加一即得1

伊吾县19895686303: %x, - 1,ffffffff为什么用f表示? -
正炎奥普: %x,就是让这个数以十六进制的形式表示出来,-1的十六进制就是ffffffff,你的编译系统应该是32位的,一个f就是4个位,8个f,就是32位了,在计算机中,负数是以补码表示的,1的十六进制为0x01,把它按位求反加一,可得到-1,即1...1,总共32个1,就是8个f;

伊吾县19895686303: C语言执行printf("%x", - 1)结果是多少为什么 -
正炎奥普: ffffffff 输出的是16进制的 都是11111111

伊吾县19895686303: 执行语句printf("%x", - 1);求输出结果,思路及详细解 -
正炎奥普: VC6.0下输出是ffffffff 这个很正常,-1在电脑里本来就是按照FFFFFFFF来存放的,因为计算机内数字是按其补码来存放的,所以是这个.输出时会自动转换,如果你用%x来输出,是说按其16进制输出,当然就是FFFFFFFF,如果用printf("%d",-1);来输出,就会看到-1了.

伊吾县19895686303: 请问printf("%x", - 1);输出结果?为什么?
正炎奥普: ffffffffvc6.0 int字符类型占4个字节1:00000000 00000000 00000000 00000001-1为1的取反+1: 11111111 11111111 11111111 111111110 + 1 =ff ff ff ff

伊吾县19895686303: int a; a=4294967295; printf("%d,%x\n",a,a); 结果为 - 1,ffffffff 这是为什么呢? -
正炎奥普: -1是十进制,ffffffff是十六进制,它们都是-1或都是ffffffff的意思,是相等的,只是写法不同.至于4294967295为什么变成了-1,这是由于一个4字节的二进制空间能表示的最大正数是4294967295,也就是十六进制FFFFFFFF,而这个数恰是有符号数的-1,因为%d是要求按有符号数输出的意思.

伊吾县19895686303: C语言填空题,答案为ffffffff,求解释 -
正炎奥普: %x为输出格式为16进制 所以-1(10)=ffffffff(16)

伊吾县19895686303: C语言里printf("%x", - 1)输出的结果怎么算啊,答案是 - ffffffff -
正炎奥普: 这个结果是 2^32-1=1111..... 32个1 那么转化成16进制就是8个f1111 -》f 1110-》e 1101-》d 1100-》c 1011-》d 1000-》a 0111-》9

伊吾县19895686303: int a= - 1; printf("%x",a);为什么输出是ffff? -
正炎奥普: a= -1 则其在内存中以补码的形式存在. 1的原码是 0000 0000 0000 0001 则-1的反码为 1111 1111 1111 1110 -1的补码为反码+1 也就是 1111 1111 1111 1111 转换成十六进制也就是 F F F F 所以结果为 ffff

伊吾县19895686303: .以下程序段的执行结果是 - ffff--. int a= - 1; printf("%x",a); 请高手帮忙解析 -
正炎奥普: 我来回答吧: %x 是以16进制输出,如果输出1的话那么16进制是0000,0000,0000,0001,那么1的反码是:1111,1111,1111,1110;-1的话就其是补码:1111,1111,1111,1111.所以是f,f,f,f; 所以输出4个f.懂了么?把我选为满意答案吧..呵呵

你可能想看的相关专题

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网