4位补码为什么可以表示-8?

weixin_44855508 2019-09-22 12:13:50
以4为二进制算,正整数可以表示2^4也就是16个数,范围就是0-15,有符号的情况把最高位作为符号位,那其实数值位只有3位,范围只能是-7到7,可问题是实际范围是-8到7,为啥可以表示-8?难道是因为补码的设定就是用1000来表示-8?
...全文
1992 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44855508 2019-10-06
  • 打赏
  • 举报
回复
引用 2 楼 weixin_44855508 的回复:
[quote=引用 1 楼 stherix的回复:]本来不就是这样的吗
1000和0000难道都代表0不成
从补码原理上来看也是

一个数的负数补码就是原码取反加1
那么128是1000,全取反 0111,再加1就是1000

4位其实表示不了-8, 1000表示8 要表示-8还需要一个符号位
1000是8的补码 也是-8的补码?[/quote]

补码将减法转为了加法:请问8位的情况 -5-2是怎么计算的?
-5原码1000 0101 补码是1111 1011
-2原码1000 0010 补码是1111 1110
-5+(-2)是直接把补码相加么?符号位要参与运算么?得到的结果要不要是原码还是补码?




Rookie on the road 2019-09-25
  • 打赏
  • 举报
回复
计算机中以二进制补码方式存储时,如果存储的非负数,则按原码存放,如果为负数,则按其补码方式存储,所以不存在+0 和-0,只有0
lin5161678 2019-09-25
  • 打赏
  • 举报
回复
引用 7 楼 weixin_44855508 的回复:
[quote=引用 6 楼 lin5161678的回复:][quote=引用 2 楼 weixin_44855508 的回复:] [quote=引用 1 楼 stherix的回复:]本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是 一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000
4位其实表示不了-8, 1000表示8 要表示-8还需要一个符号位 1000是8的补码 也是-8的补码?[/quote]4位有符号 无法表示 8[/quote] 0和-0的补码为啥是一样的 -0是1000吗?那补码就还是1000 0的补码是0000 不是不一样么。。。。[/quote]1000表示-8 根本不存在 -0 你有点语无伦次 问题一个一个列出来 一个一个弄清楚 别混在一起
weixin_44855508 2019-09-25
  • 打赏
  • 举报
回复
引用 6 楼 lin5161678的回复:
[quote=引用 2 楼 weixin_44855508 的回复:]
[quote=引用 1 楼 stherix的回复:]本来不就是这样的吗
1000和0000难道都代表0不成
从补码原理上来看也是

一个数的负数补码就是原码取反加1
那么128是1000,全取反 0111,再加1就是1000

4位其实表示不了-8, 1000表示8 要表示-8还需要一个符号位
1000是8的补码 也是-8的补码?[/quote]4位有符号 无法表示 8[/quote] 0和-0的补码为啥是一样的 -0是1000吗?那补码就还是1000 0的补码是0000 不是不一样么。。。。
stherix 2019-09-22
  • 打赏
  • 举报
回复
本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是 一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000
lin5161678 2019-09-22
  • 打赏
  • 举报
回复
引用 2 楼 weixin_44855508 的回复:
[quote=引用 1 楼 stherix的回复:]本来不就是这样的吗
1000和0000难道都代表0不成
从补码原理上来看也是

一个数的负数补码就是原码取反加1
那么128是1000,全取反 0111,再加1就是1000

4位其实表示不了-8, 1000表示8 要表示-8还需要一个符号位
1000是8的补码 也是-8的补码?[/quote]4位有符号 无法表示 8
stherix 2019-09-22
  • 打赏
  • 举报
回复
引用 4 楼 liups 的回复:
[quote=引用 3 楼 stherix 的回复:] [quote=引用 2 楼 weixin_44855508 的回复:] [quote=引用 1 楼 stherix的回复:]本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是 一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000
4位其实表示不了-8, 1000表示8 要表示-8还需要一个符号位 1000是8的补码 也是-8的补码?[/quote] 1000并不是8的补码啊 8已经溢出了... 毕竟只能表示 -2^n -> 2^n - 1 范围的数 不过硬要说的话那也是的 对于4bit而言 加8就等于加-8[/quote] 没溢出,谢谢[/quote] 你说没溢出那就没溢出吧
liups 2019-09-22
  • 打赏
  • 举报
回复
引用 3 楼 stherix 的回复:
[quote=引用 2 楼 weixin_44855508 的回复:] [quote=引用 1 楼 stherix的回复:]本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是 一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000
4位其实表示不了-8, 1000表示8 要表示-8还需要一个符号位 1000是8的补码 也是-8的补码?[/quote] 1000并不是8的补码啊 8已经溢出了... 毕竟只能表示 -2^n -> 2^n - 1 范围的数 不过硬要说的话那也是的 对于4bit而言 加8就等于加-8[/quote] 没溢出,谢谢
stherix 2019-09-22
  • 打赏
  • 举报
回复
引用 2 楼 weixin_44855508 的回复:
[quote=引用 1 楼 stherix的回复:]本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是 一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000
4位其实表示不了-8, 1000表示8 要表示-8还需要一个符号位 1000是8的补码 也是-8的补码?[/quote] 1000并不是8的补码啊 8已经溢出了... 毕竟只能表示 -2^n -> 2^n - 1 范围的数 不过硬要说的话那也是的 对于4bit而言 加8就等于加-8
weixin_44855508 2019-09-22
  • 打赏
  • 举报
回复
引用 1 楼 stherix的回复:
本来不就是这样的吗 1000和0000难道都代表0不成 从补码原理上来看也是 一个数的负数补码就是原码取反加1 那么128是1000,全取反 0111,再加1就是1000
4位其实表示不了-8, 1000表示8 要表示-8还需要一个符号位 1000是8的补码 也是-8的补码?

69,368

社区成员

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

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