关于计算机底层8位二进制数-128~127这个范围的研究问题

关于计算机底层8位二进制数-128~127这个范围的研究问题:

首先要明确:

1.计算机识别这8位是带符号的,也就是说这8位是有符号整数,即仅有7位是表示值的。
2.如果是人为计算的话,你也可以视为这8位是无符号整数,这样算的话就要跟模联系起来才能跟1中对应起来。

由于2理解可能有点难,我们先说难的:

假设现在是2点钟,请用手动拨动时针的方式将时间减4小时,你会怎么做?

有两种方式:
逆时针将时针拨4小时
顺时针将时针拨8(12-4)小时

也就是说 n-a = n+b, 2-4=2+8这里的定义不是数学上严格意义的值,而是效果(达到时间减4小时这种效果)
那么这个a和b究竟是什么关系呢?
a=12-b,这个12是个特殊的数字,在钟表系统中12就是极限,学术上定义位,注意:不同的系统对于极限的定义可能有所不同,比如我们常见的数字系统

80-10 和 80+90,前者位70,后者为170,找相似,忽略100,70=70,两者效果一样,我们脑中联系一下10、90、100和70、170、100之间的关系:10+90=100,170%100=70,再联系时钟案例,a=10,b=90,10=100-90,所以说100就是2位数的极限(99+1),也就是模。

总结:n-a = n+b 模=极限=a+b ( n+b)%模=n-a,两个相加等于模的数互为补数,即a和b互为补数。

根据上面公式10-30=10+70 80%100=-20显然这个公式不够完美,数据支撑性比较弱,不够健壮

那么如何将n-a = n+b完美一下呢,首先,索性-20=80,也就是说我们可以使用80代表-20,同时可以关联到-20绝对值的补数就正好是80,也就是说以后

用两位正整数表达两位负整数的规则:-(两位数的模-两位正整数)

但是两位正整数既原意表示,又表示负数,到底去哪个呢?
为了解决这个问题,需要给这套规则划定一个范围,原来是0~99的正数,现在既然要用部分正数来代替负数了,那就要规定一个范围来使得一个数只代表一个含义,正好一人一半,0~49这个区间就代表正数50~99的区间就用来代表各自补数的负值,例:98就代表-2,这和上面两位正整数表达两位负整数的规则完美契合。0~49和50~99分别对应0~49和-50~-1以0和-1中间为界,接近1/2正数和1/2负数对称

根据上面的理论:8位是无符号整数,转成人看的10进制共256位(包括0),一半0~127,另一半128~255表示-(256-255)=-1~-(256-128)=-128,8位是无符号整数的极限就是8位全1+1。

再看1的分析:

计算机的世界:
最小00000000(0),最大01111111(127),是不是跟上面一半0~127对应了,并且这里将最高位作符号位后也是正数一半,负数一半。同时最大10000001(-1)为啥不是10000000(因为-0也是0,0在正数那边表示过了,这里的10000000另作安排)最小11111111(-127),饿货,跟上面-(256-255)=-1~-(256-128)=-128(简化:-1~-128)不对应了,所以10000000就有了用处,作为一种约定:10000000代表10进制-128,同时作为补码
因此:
计算机底层运算规则:
原码=》补码=》运算
打印到控制台 :补码=》原码(负数:-1除符号位按位取反)
demo:

Byte a = 127;
a++
 System.out.println(a);   //a=-128

计算机底层运算过程:
原码-》补码
01111111=》01111111
add 1
10000000(此时10000000是补码,上面讨论过补码10000000代表10进制-128)
补码-》原码
10000010-1=10000001
10000001=》11111110

Byte a = -127;
a++
 System.out.println(a);   //a=-126

计算机底层运算过程:
原码-》补码
11111111=》10000001
add 1
10000010
补码-》原码
10000010-1=10000001
10000001=》11111110

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值