byte型变量的取值范围

sqq4290 2008-04-14 10:03:07
注:"^"代表好多次方,例如2^3代表2的3次方即8

Q1:为什么byte型的最小值是-2^7(即-128)而不是-2^7+1(即-127)?
我按照2进制换算到10进制的方法应该是:
最高位符号位不算,后面7位应该是:-2^6-2^5-2^4-2^3-2^2-2^1-2^0=(-1)*(2^7-1)/(2-1)=-2^7+1=-127

Q2:为什么负数要用补码表示?要得到用byte表示的-8的补码,为什么要先到得到7的源码?
...全文
1829 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sqq4290 2008-04-15
  • 打赏
  • 举报
回复
我只是想知道负方向的那个范围是怎么算出的啊,知道得能不能列一下计算过程?
但是书上说了00000000中的最高位表示符号,那就只能用剩下的7位来表示数值吧,那为什么还能表示到-128
hyzhx 2008-04-15
  • 打赏
  • 举报
回复
五楼的朋友,学习了。
wensheng_zh2007 2008-04-15
  • 打赏
  • 举报
回复
看看《计算机组成原理》
thunderclap 2008-04-15
  • 打赏
  • 举报
回复
首先byte是8位的,所以它只能是
00000000-11111111;
其次,这些数字都是补码.
所以它是-128 到 127之间的数.
南南北北 2008-04-15
  • 打赏
  • 举报
回复
好久没看到"补码"了.
晨星 2008-04-15
  • 打赏
  • 举报
回复 1
至于“负数补码最高位为1,其它位等于相应正数的反码加1”——那只是一个教你快速计算补码的“口诀”而已,而非定义性的,最好不要拿它来作更细致分析。
当然,从这个“口诀”中,也推不到跟-128的表示有什么实质性的矛盾,只不过溢出了1位让人有点不大舒服而已。
晨星 2008-04-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sqq4290 的回复:]
我只是想知道负方向的那个范围是怎么算出的啊,知道得能不能列一下计算过程?
但是书上说了00000000中的最高位表示符号,那就只能用剩下的7位来表示数值吧,那为什么还能表示到-128
[/Quote]
补码中,负数最高位都是1,但那可以认为只是一种巧合。
按照补码的定义,一个负数M的补码,其二进制表示等同于无符号整数2 ^ N + M,其中N是这种类型的位数。
对于byte的-128而言,N为8,M为-128,2 ^ 8 + (-128) = 128,而无符号数的128正好是:10000000。
从这个角度来数,当无符号数的0~255表示带符号数时,基中0~127仍表示原值,而128~255则表示-128~-1,补码表示中不像原码那样还有个-0。
晨星 2008-04-14
  • 打赏
  • 举报
回复
用补码表示负数,电路实现简单,可以用一个加法器同时计算加法和减法。
用补码表示的数,按照定义,最小的就是-128。
如果不看定义,你也可以理解为“-0”表拿去表示-128了,仅仅“+0”用来表示0。
本来一个byte,8个比特,有256种状态,正好-128到+127是256个数,一个状态也没浪费。
haoxiongok 2008-04-14
  • 打赏
  • 举报
回复
看看那个什么符来着?
sqq4290 2008-04-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hyzhx 的回复:]
0 1 1 1 1 1 1 1 (127)
1 0 0 0 0 0 0 0 (-128)
基础知识,查一下书。
[/Quote]
!-_- 我就是看了书之后不明白
hyzhx 2008-04-14
  • 打赏
  • 举报
回复
0 1 1 1 1 1 1 1 (127)
1 0 0 0 0 0 0 0 (-128)
基础知识,查一下书。
wanghao111 2008-04-14
  • 打赏
  • 举报
回复
交流群 C++ java 36414176

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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