zoukankan      html  css  js  c++  java
  • Java 中,byte 数据类型的取值范围为什么是 -128

    我们只讨论 byte; byte  在计算机中是8位;第一位为符号位。0表示正数,1表示为负数,其余的7位表示 具体的值。要理解一点 就是 数值在计算机内存中的存储是补码的方式

    存储的,有一定的规则,即正数的话 原码 反码 补码 一样,负数的话,原码是负数的绝对值,最高位 是1 ,反码是 最高位不变,然后其余位 取反 ,补码是 最高位不变,反码+1

    举例:byte 能表示的正数的最大值为:

    0111 1111 = 2的7次方 -1 = 127。

    正数最小值为:

    0000 0000 = 0;

    正数的原码,反码 补码 相同。

    再来看负数的最大负值:

    1111 1111 = -2的7次方 -1 = -127 

    原码:1111 1111 

    反码:1000 0000

    补码:1000 0001

    ------------------------------

    再来看负数的最接近正数的值,即最小负值:

    1000 0000 = -0;

    原码:1000 0000

    反码:1111 1111

    补码:1000 0000(注意这里溢出了) 

    可见,-0 的原码 和 补码是一样的,实际上 计算机规定的,1000 0000 = -128 ;

    通常说 -128 只有补码,没有原码和反码,因为原码是 -0 ,-0 你怎么能认为是 -128呢。

    即:-128在计算机中的补码为:1000 0000  ,没有原码和反码;

    是可以进行运算的,比如:

    -128 + 3 = -126 在计算机中的计算如下:

    补码(1000 0000)+ 补码(0000 0011)= 补码(1000 0011)

    然后再把1000 0011转换成原码的步骤为:

    先转换成反码即减1 = 1000 0010 

    然后再利用反码转换成原码为:1111 1101 

    再把原码转成十进制为:-125,计算的方法如图:

    总结:补码 1000 0000 就是 -128的意思,经过计算你会发现原码也是:1000 0000 ,但是我们通常说 1000 0000 没有原码,因为-0没有意义。

  • 相关阅读:
    centos 7安装libreoffice
    python3-xlwt-Excel设置(字体大小、颜色、对齐方式、换行、合并单元格、边框、背景、下划线、斜体、加粗)
    PHP导出身份证号科学计数法
    PHP接收json格式的POST数据
    微信小程序知识
    搭建Vue开发环境的步骤
    公众号认证?小程序认证?小程序复用公众号资质进行认证?
    七牛云——批量将本地图片上传到七牛云
    身份认证接口
    php二维数组去重
  • 原文地址:https://www.cnblogs.com/del88/p/12899799.html
Copyright © 2011-2022 走看看