美文网首页
java byte数值范围 -128-127

java byte数值范围 -128-127

作者: 南土酱 | 来源:发表于2019-04-16 16:39 被阅读0次

    话不多说,直接进入正题

    byte i =127;System.out.println(++i);   //很意外的会输出 -128
    

    推测代码执行的结果,分析结果产生的原因。

    答:
    先看计算机二进制拓展:

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

    也就是说:
    - 正数的补码就是其本身。
    - 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
    
    [+1] = [00000001]原 = [00000001]反 = [00000001]补
    
    [-1] = [10000001]原 = [11111110]反 = [11111111]补
    
    对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.
    
    正数:
    (p)正数的反码和补码都与原码相同
    
    负数:
    (p)负数的反码、补码与原码不同,负数的反码:原码中除去符号位,
    其他的数值位取反,0变1,1变0。负数的补码:反码+1
    
    正题:基本数据类型 byte:  1 byte = 1字节  = 8bit (位)
    最高位是符号位。
    即最大值是01111111(十进制表示形式为127),即此正数为01111111。
    那最小值相反就是负数, 负数的符号位是1 , 即 10000000(-128)。
    01111111+1 = 10000000
    
    image.png

    相关文章

      网友评论

          本文标题:java byte数值范围 -128-127

          本文链接:https://www.haomeiwen.com/subject/euibwqtx.html