二进制运算

二进制有原码 反码 和补码
计算机中在运算时使用的都是补码
btye 类型 (-128)- (127)
btye类型在java中站一个字节 一个字节=8位(bit)
计算机只能存储0和1

1111 1111
当全部存满时算出来是255
如果只是这样的话负数怎么表述 如果上述的 1111 1111 的十进制是255的话显然没有地方可以标识符号了
所以计算机中规定 1开头是负数 1111 1111 实际上是 -127
正数127的二进制是 0111 1111 
当 0111 1111 和 0000 0001相加时 一般等于128 但是超过了btye的范围 会报错

补码

二进制直接存储都是补码
正数的话原码和补码都是相同的

原码

二进制运算时都是要使用原码进行运算
正数的话原码和补码都是相同的

反码

当负数要从补码转化成原码时就要先转换成反码
反码也很简单就是把除符号位 之外全部取反
1111 1110 (-126的补码)的反码是 1000 0001(-126的反码)
再转化为原码 (原码就是反码 +1)1000 0010(-126的原码)
1000 0000是-128的补码
1111 1111是-128的反码
1 1000 0000是-128的原码
1111 1111是-127的补码
1000 0000是-127的反码
1000 0001是-127的反码

1000 0010
0000 0001
1000 0011(上述两个相加完之后的结果 按理说是 -125)

先是 (1250111 1101
加上符号      1111 1101
取反          1000 0010
+1转原码      1000 0011 和上面运算结果相同
0111 1111127的二进制)
1000 0001-1的二进制)
1 0111 1110 这明显就不对了 应该是(0111 1110126的二进制))
这里就要涉及到溢出了 二进制设计很巧妙
就像看手表一样 虽然是24小时但是人一般习惯 12个小时那样的叫
从下午2点到早上10点 可以拨动时针 逆时针4位 也可以顺时针82 + 8 = 10
2 - 4 = 10 实际上是 (2 +12 - 4= 10)
有负数的运算就 2 +-4-4的原码就相当于是(12 -4)
因为它是实际上是12进制算是
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值