分享

JAVA byte最大值是127,最小值确实

 yimiludou 2020-10-22

计算机-原码

就是二进制定点表示法,即最高位为符号位:“0”表示正,“1”表示负,其余位表示数值的大小。

该数字不进行其他操作时数字最原始的二进制表示, 对于原码来说,绝对值相等的正数和负数只有符号位不同。

计算机-反码

正数的反码与其原码相同;

负数的反码是对其原码逐位取反,但符号位除外。(只需要将原码除符号位以外的位数取反,即0改为1,1改为0)

计算机-补码

正数的补码与其原码相同;

负数的补码是在其反码的末位加1。

计算机-为什么会有反码和补码

有人会有疑惑为什么要用反码,补码,不直接用原码呢?
先搞清楚一点反码、补码、原码是针对二进制数而言,计算机若用原码相加减,正数加正数不会出错,然而正数和负数原码相加就会出错。说白了,补码、反码就是为了简化减法而来的,将减号化为负数后再将负数化为补码求加法,就跟正数没关系了!
不管是正整数还是正小数,原码,反码,补码都全部相同。计算机中所有数都是以补码形式存储的。

1.10+(1)时:1010 + 0001 = 1011,即11。

2.10+(-1)时:00001010 + 10000001 = 10001011 ,即 -11。(原码参与加法运算)

3.10+(-1)时:00001010 +  11111111  = 00001001,即 9。(补码参与加法运算)

各位看官,能看明白不?

JAVA中的正数、负数

JAVA中用补码表示二进制数

byte的最大值

正数原码,由于最高位只能是0,因此最大值为:0 111 1111,即127。

byte的最小值

负数原码,由于最高位只能是1,因此最小值为:1 111 1111,即-127,我擦,那哪来的-128呢?

这里有个问题即0,是属于正数呢,还是属于负数呢?:+0表示为:00000000,-0表示为:1000000。

因为最高位是符号位不算在里面,所以就会有两个0,所以从一开始发明二进制的时候,就把-0规定为-128,如此二进制的补码就刚好在计算机中运作中吻合。(这里就是把最高位符号位,既是符号位,又是最高位,因此这里的1既代表是负数,又代表2^7次方)

总结

2^8=256,即能有256个数字,包括最高位是0和1的情况,

最高位是1和0即正数和负数平分一下,就是正负各 128 个值,

相当于-127到-0,0到127,这样正负数各128个,

由于-0算成最小负数,负数没有少,所以负数是128个

由于正数的0没有了,正数少一个,所以正数是127个

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多