关于byte的取值范围[127,-128]的一些思考和学习记录

   关于byte的取值范围[127,-128]的一些思考和学习记录             

在计算机中,1byte由8bit组成,而且计算机使用的是只有0和1的二进制,由于第一位是符号位(0为正,1为负),实际用于记录数字大小的只有7bit,可以用等比数列求和公式算出二进制数0B1111111(7个位上都是1)是127,但byte的取值范围是[127,-128],一般来说,是不会取到-128这个数值,但byte确实取到了-128.经过思考后,我发现因为符号位的存在使得byte可存储的数据中出现了0B10000000这个数据,一开始我推断这个数据应该就表示-128,但是还得验证。
怎么验证呢?我想的是通过编写对-128进行加减的程序,但很快更大的问题出现了

在这里插入图片描述
由此 我就有了疑惑:0B10000000不表示-128?还是程序中加减法的实现方式与一般的计算不同?
后面我又用程序进行几次运算,我发现当有负数参与时 运算规律应当是与一般数学运算是不同的。
因为怎么都想不通,所以求助了百度。
疑惑解开了,原来计算机中没有减法 ,都是用加法来代替的。
实现的方式为运算是对数字进行处理,称为原码,补码,反码,正数的原码、补码、反码都为它本身,而负数的原码为它本身,反码为除符号位不变,其他位取反(即0变为1,1变为0),补码为反码加1。
进行运算时,补码相加。
为什么有这样的效果呢?我的理解是,除开符号位,数字不断增加(0000000,0000001,。。。。1111111,0000000.。。。。),它们处在一个循环当中,取反码正好是它在循环中缺失的那一部分,一个数(处在相同循环中的另一个数)减去它,正好与加上这个缺失部分的结果相同,通过这样就将减法转化为了加法,至于负数补码还要加1,是因为正负0的存在。
这样得到结果符合实际。

猜你喜欢

转载自blog.csdn.net/Venveb/article/details/88956715