补码问题1111 1111 1111 1111 的源码十进制表示是多少

YOYOV51234 2011-12-22 02:25:29
16位=2字节 16位有符号数的范围问题

当最高位为0 正数时候 (补码就是自身) : 0000 0000 0000 0000 十进制 0
0111 1111 1111 1111 十进制 32767


最高位为1 负数时候:(补码) 1000 0000 0000 0000 源码: 10000 0000 0000 0000 十进制:?
1111 1111 1111 1111 源码:1000 0000 0000 0000 十进制:-1


想请问 哪位大侠, 1 0000 0000 0000 0000 ;已经溢出 为什么这个数字 是 -32767
...全文
2155 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
skyworth98 2012-01-05
  • 打赏
  • 举报
回复
-1
little_more 2012-01-05
  • 打赏
  • 举报
回复
学学底层你就懂了,码制是很重要的,是运算的基础

[Quote=引用 16 楼 zhao4zhong1 的回复:]

对电脑而言没有原码、补码、正数、负数……,只有二进制字节;对人脑才有各种码,包括乱码。
[/Quote]
Saleayas 2011-12-30
  • 打赏
  • 举报
回复
就是因为这个无法表示的原因,采用那么复杂的补码!
当然,用补码还有其他的好处。
Frog1228 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 yoyov51234 的回复:]
引用 14 楼 mjjackey 的回复:
引用 13 楼 mingliang1212 的回复:
引用 12 楼 mjjackey 的回复:

原码能表示负数吗?它只能表示正数吧,8位为例,它所表示的范围是0~2^7-1(即127,二进制就是0111 1111)(有符号整数)。
-127的表示应该是1000 0001,负数在计算机内部都是用补码表示的。


建议楼上看原码,反码,补……
[/Quote]
是可以的,原码,反码也都可以表示负数,按照纯的理论上的编码来看的话,除保留符号位,正数为0,负数为1,原码的数值绝对值部分就是数原来的部分,反码就是把原数的每位取反。但是实际在计算机中,负数都是用补码表示的。
赵4老师 2011-12-30
  • 打赏
  • 举报
回复
对电脑而言没有原码、补码、正数、负数……,只有二进制字节;对人脑才有各种码,包括乱码。
YOYOV51234 2011-12-30
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 mjjackey 的回复:]
引用 13 楼 mingliang1212 的回复:
引用 12 楼 mjjackey 的回复:

原码能表示负数吗?它只能表示正数吧,8位为例,它所表示的范围是0~2^7-1(即127,二进制就是0111 1111)(有符号整数)。
-127的表示应该是1000 0001,负数在计算机内部都是用补码表示的。


建议楼上看原码,反码,补码分别是什么..

不好意思,弄错了,原码……
[/Quote]

有点不太明白呢, 原码 如何表示负数/
不是说负数都是由补码表示的吗
Frog1228 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 mingliang1212 的回复:]
引用 12 楼 mjjackey 的回复:

原码能表示负数吗?它只能表示正数吧,8位为例,它所表示的范围是0~2^7-1(即127,二进制就是0111 1111)(有符号整数)。
-127的表示应该是1000 0001,负数在计算机内部都是用补码表示的。


建议楼上看原码,反码,补码分别是什么..
[/Quote]
不好意思,弄错了,原码也可以表示负数。8位为例,是1111 1111~0111 1111即-(2^7-1)至2^7-1
iamnobody 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 mjjackey 的回复:]

原码能表示负数吗?它只能表示正数吧,8位为例,它所表示的范围是0~2^7-1(即127,二进制就是0111 1111)(有符号整数)。
-127的表示应该是1000 0001,负数在计算机内部都是用补码表示的。
[/Quote]

建议楼上看原码,反码,补码分别是什么..
Frog1228 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mingliang1212 的回复:]
引用 5 楼 yoyov51234 的回复:

意思是 除了 这个数字 别的都可以那样算,
我就是在想问问啊 , 那计算8位 16 位 32位 带符号数字的最大最小值
按照你说的那个 那最小数字 都是规定的 ? 那这三个最小数字都不能用那种方法算 是吗?

小妹 愚昧 ·· 谢谢开导 ·


这个最小数字是""补码""这个编码方式规定的.
"原码"也是一种编码方式.

"原……
[/Quote]
原码能表示负数吗?它只能表示正数吧,8位为例,它所表示的范围是0~2^7-1(即127,二进制就是0111 1111)(有符号整数)。
-127的表示应该是1000 0001,负数在计算机内部都是用补码表示的。
Frog1228 2011-12-22
  • 打赏
  • 举报
回复
你弄错了吧,负数补码1000 0000 0000 0000的原码的真值(取反加1)还是1000 0000 0000 0000,它的源码的十进制表示是-2^15即-32768,因为它是负数所以是负的32768,没有溢出。
求补码的原码真值,“最高位符号位”是不参加取反加1的!!!
lida2003 2011-12-22
  • 打赏
  • 举报
回复
你看这个吧,补码,反码,都有定义,还有例子

http://blog.csdn.net/lida2003/article/details/6973469
iamnobody 2011-12-22
  • 打赏
  • 举报
回复
1000 0000 0000 0000 是-32768

上面说错了,呵呵,,,

另外,益出是在计算的时候判断的.判断溢出是要根据符号位和最高位是否进位来判断..你应该还没有学到这个吧....
YOYOV51234 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mingliang1212 的回复:]
引用 5 楼 yoyov51234 的回复:

意思是 除了 这个数字 别的都可以那样算,
我就是在想问问啊 , 那计算8位 16 位 32位 带符号数字的最大最小值
按照你说的那个 那最小数字 都是规定的 ? 那这三个最小数字都不能用那种方法算 是吗?

小妹 愚昧 ·· 谢谢开导 ·


这个最小数字是""补码""这个编码方式规定的.
"原码"也是一种编码方式.

"原……
[/Quote]

哈哈哈 我想通了 想通了
1000 0000 0000 0000 是补码表示
补码到源码是 -1 就是 0111 1111 1111 1111
在求反 就是1000 0000 0000 0000

1000 0000 0000 0000 是32767
它是负数 所以是 -32767 是吗?
iamnobody 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yoyov51234 的回复:]

意思是 除了 这个数字 别的都可以那样算,
我就是在想问问啊 , 那计算8位 16 位 32位 带符号数字的最大最小值
按照你说的那个 那最小数字 都是规定的 ? 那这三个最小数字都不能用那种方法算 是吗?

小妹 愚昧 ·· 谢谢开导 ·
[/Quote]

这个最小数字是""补码""这个编码方式规定的.
"原码"也是一种编码方式.

"原码"能表示的范围(8位为例)是: -127 ~ 127;
"补码"能表示的范围是: -128 ~ 127;
因为原码根本不能表示 -128;所以-128这个数不能转换成原码.
还有,,上面的那个应该是-65536吧不是-32767
飞天御剑流 2011-12-22
  • 打赏
  • 举报
回复
1000 0000 0000 0000不是-32767,是-32768。补码是反码的移码,通过移码消除了负0,因而-32768其实是由反码中的-32767“转移”过来的,-32768并没有对应的正数,所以-32768是不能象其它负数那样通过原码得到,它只能通过-32767-1得到,32767的原码是0111 1111 1111 1111,取反加1就是1000 0000 0000 0001,再减1就是1000 0000 0000 0000了。

而对于计算机的内部表示,无论有符号还是无符号,计算机都是一视同仁的,因为无论无符号还是有符号,都是一层人为的抽象,对于计算机来说,都是位而已。因而计算机对于无符号有符号的计算都使用相同的机器指令,例如ADD、ADC啊、SUB、SBB啊等等,仅通过C、O、S等状态标志来分别表示无符号、有符号的计算结果的状态。
YOYOV51234 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mingliang1212 的回复:]
引用 3 楼 yoyov51234 的回复:
引用 2 楼 mingliang1212 的回复:
补码是求反之后再加1!!!你有加1吗??


就是1000 0000 0000 0000 的补码

1111 1111 1111 1111 --求反
10000 0000 0000 0000 --加1

16位 现在是17位 为什么不会溢出啊 ?


实际上计算机的运算是没有……
[/Quote]


意思是 除了 这个数字 别的都可以那样算,
我就是在想问问啊 , 那计算8位 16 位 32位 带符号数字的最大最小值
按照你说的那个 那最小数字 都是规定的 ? 那这三个最小数字都不能用那种方法算 是吗?

小妹 愚昧 ·· 谢谢开导 ·
iamnobody 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yoyov51234 的回复:]
引用 2 楼 mingliang1212 的回复:
补码是求反之后再加1!!!你有加1吗??


就是1000 0000 0000 0000 的补码

1111 1111 1111 1111 --求反
10000 0000 0000 0000 --加1

16位 现在是17位 为什么不会溢出啊 ?
[/Quote]

实际上计算机的运算是没有求源码这一步的,1000 0000 0000 0000
就是代表 -32767;这个计算机自己是知道的.这也是一个特殊的数,为了不浪费整型的表示数据的范围,而定义为最小的整数.其他的数都可以根据求反+1得出相应的源码,但是计算机从不求源码后计算.他直接相加就可以了
YOYOV51234 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mingliang1212 的回复:]
补码是求反之后再加1!!!你有加1吗??
[/Quote]

就是1000 0000 0000 0000 的补码

1111 1111 1111 1111 --求反
10000 0000 0000 0000 --加1

16位 现在是17位 为什么不会溢出啊 ?
iamnobody 2011-12-22
  • 打赏
  • 举报
回复
补码是求反之后再加1!!!你有加1吗??
iamnobody 2011-12-22
  • 打赏
  • 举报
回复
10000 0000 0000 0000

这个是16位整形能表示的最小数.
不是溢出..

70,024

社区成员

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

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