-1(int型)为什么不表示为0x10 00 00 01 ?书上不是说第一个bit是用来表示为正数还是负数的吗?

soarhigh 2005-11-15 12:12:28
按我的想像,
+1为 0x00 00 00 01
-1为 0x10 00 00 01,
但是编译器告诉我
-1是 0xFF FF FF FF.
这是为什么,盼赐教!谢谢!
...全文
714 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Juchiyufei 2006-03-22
  • 打赏
  • 举报
回复
学习
codearts 2005-11-16
  • 打赏
  • 举报
回复
补码=原码逐位取反再加1(符后位除外)
原码=补码逐位取反再加1(符后位除外)
freecare 2005-11-16
  • 打赏
  • 举报
回复
在计算机进行负数表示时,是这样考虑的(拿1、-1做例子):
1 00...0001
如果把-1直接表示为1的反码11..1110表示的话
两个数相加 00...0001
+11...1110
-----------
11...1111
这样就与1+(-1) = 0想违背,所以考虑用补码进行表示,即用反码加1的形式进行表示;
00...0001
+11...1111
-------------
00...0000
cdo 2005-11-16
  • 打赏
  • 举报
回复
0x是16进制,不是二进制。
屋顶上的老猫 2005-11-16
  • 打赏
  • 举报
回复
搞的我神经错乱,0x表示十六进制!

翻译成原码10 00 00 01(二进制) == 0x81(十六进制)
显示的补码11 11 11 11(二进制) == 0xff(十六进制)

根据操作系统的不同也只是位数上的变化,原理是一样的!
goodluckyxl 2005-11-15
  • 打赏
  • 举报
回复
补码你知道么
不懂就打开计算机原理第一章
kekexili7 2005-11-15
  • 打赏
  • 举报
回复
好深奥阿 看不懂 呵呵
Eastunfail 2005-11-15
  • 打赏
  • 举报
回复
因为-1等于0-1啊
-1的表示就是用0减去1算出来的
你那样表示就不满足这个等式了
  • 打赏
  • 举报
回复
1 0000xxx 1 是原码表示, 1 111111xxxx 1 是补码表示
xiaosong8584 2005-11-15
  • 打赏
  • 举报
回复
晕 ,
计算机处理浮点数,尾数用补码,阶码用增码,
处理乘除运算源码比较合适,
处理加减运算补码比较好,
至于为什么>
赫赫,不知道
robertxiao 2005-11-15
  • 打赏
  • 举报
回复
0x00 00 00 01
0x10 00 00 01,
这都是十六进制数,不是二进制数。
x86 2005-11-15
  • 打赏
  • 举报
回复
最高位为1表示负数,但是其值为“最大数”与其值的差
elvispl 2005-11-15
  • 打赏
  • 举报
回复
晕,连十六进制和二进制都搞不清楚,0x100000001是十六进制,这个数最高位不是1
yanxiazhiqiu 2005-11-15
  • 打赏
  • 举报
回复
补码就是原码取反+1。
megaboy 2005-11-15
  • 打赏
  • 举报
回复
0就是0x00000000,而-1就是0-1,于是0x00000000-0x00000001等于0xffffffff。
yuanchuang 2005-11-15
  • 打赏
  • 举报
回复
我在上面打错了一个字,补码是反码加1。不好意思。呵呵
yuanchuang 2005-11-15
  • 打赏
  • 举报
回复
详细说来,就是用补码表示,比如在32位系统中,-1原码是:10000000000000000000000000000001,第一位是符号,取反,第一位不变,则结果是:11111111111111111111111111111110,补码是原码加1,等于:11111111111111111111111111111111,转换成16进制(从右往左4位2进制转成1位16进制)便是:
0xFFFFFFFF。
好了,相信你现在已经懂了。
zhflwx 2005-11-15
  • 打赏
  • 举报
回复
计算机中负数是用补码来表示的。补码的算法就是源码取反再加一。非常认同 zeroblock(吉米)的观点。表示成补码就是0xffffffff而不是0xff。
gaoch_2000 2005-11-15
  • 打赏
  • 举报
回复
0xFF FF FF FF这是存储单位里能够存储的最大值,0x10 00 00 01 放不进去。
0
-1 1
-2 2
。。。。。。。。

-127 127
-128
yuanchuang 2005-11-15
  • 打赏
  • 举报
回复
你说得很对,0x是表示16进制,1才是第一位他是表示负的,16进制中没有负数,全是无符号的,最后一个1是他的值
加载更多回复(5)

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧