byte类型最大值和最小值-128~127

  • 先了解二进制运算的几个概念

  • 正数的反码和补码都是自己
  • 负数的反码:符号位除外,其他位取反
  • 负数的补码:其反码末位+1
  • 实例(byte类型): 10-1=9

  • 目前所知cpu的所有运算都是建立在二进制的加法基础上,为了复用这套加法算法避免多设计一套半导体来实现减法,所以简化减法变成了带符号位的的加法(eq: 10-1=10+(-1)),同时规定负数要转化为补码再进行加法运算,
  • 反码好处就是负数可以带着符号位一起参与运算了
10-1=10+(-1)  = 0000,1010 + 1111,1111 = 0000,1001=9
10的二进制:0000,1010
-1的二进制:1000,0001
-1的补码: 1111,1111
  • 所以byte类型的取值范围

  • 最大值: 0111,1111 = 127
    最小值: 1111,1111 = -127 (感觉那里不对劲!) 二进制中其实存在 +0,-0的概念,并且规定-0就是最小值,在byte中-0: 1000,0000 = -128 ,也就是 -0 = -128 ,这个1既是符号位也是数值位
  • 最小值:-0: 1000,0000 = -2^8 = -128

代码验证

    @Test
    @DisplayName("byte最大值和最小值")
    void test2() {
        // 0b标识二进制
        byte a = (byte) 0b00000010;
        byte b = (byte) 0b00000001;
        System.out.println("2-1=" + (a - b));

        byte max = (byte) 0b01111111;
        byte min = (byte) 0b10000000;
        System.out.println("byte最大值:" + max);
        System.out.println("byte最小值:" + min);
    }

结果输出:
2-1=1
byte最大值:127
byte最小值:-128

扩展

二进制规定-0是最小值

  • 所以 Integer占4字节=32位,所以最小值是 -0 = -2^(32-1)
  • Integer最大值是: 2^(32-1)-1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容