为什么Java byte 类型的取值范围是-128~127

概念:负数的补码是该数绝对值的原码按位取反,然后对整个数加1
步骤:

  1. 确定byte是1个字节,也就是8位
  2. 最大的应该是0111 1111,因为第一位是符号位,0表示正数
  3. 最小的应该是1000 0000,同理,表示负数最小的(1111 1111是最大的负数-1)
  4. 0111 1111即127
  5. 1000 0000按照最下面的解释为先减一,得到0111 1111,然后按位取反得到1000 0000,该结果为欲求负数的绝对值,所以结果是-128(和概念反着来求出该负数)

=========================================================

在计算机内,定点数有3种表示法:原码、反码和补码
[原码]就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
[反码]表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
[补码]表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。

=========================================================

补 码
Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。

补码的规定如下 :
对正数来说,最高位为0,其余各位代表数值本身(以二进制表示),如+42的补码为00101010。
对负数而言,把该数绝对值的补码按位取反,然后对整个数加1,即得该数的补码。
如-42的补码为11010110(00101010按位取反11010101+1=11010110)
用补码来表示数,0的补码是唯一的,都为00000000。
(而在原码,反码表示中,+0和-0的表示是不唯一的,可参见相应的书籍)。
而且可以用111111表示-1的补码(这也是补码与原码和反码的区别)。


» 本文链接:https://blog.java-zone.org/archives/329.html
» 转载请注明来源:Java地带  » 《为什么Java byte 类型的取值范围是-128~127》

» 本文章为Java地带整理创作,欢迎转载!转载请注明本文地址,谢谢!
» 部分内容收集整理自网络,如有侵权请联系我删除!

» 订阅本站:https://blog.java-zone.org/feed/

标签: Java

添加新评论