计算机-原码
就是二进制定点表示法,即最高位为符号位:“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个