JAVA基础之进制

二进制的原码反码补码

本文以byte类型为例子。一个字节是8位,java没有无符号数,最高位表示符号位。正数以最高位0来表示,负数以最高位1来表示。

二进制原码:

6的原码:1000 0110
-6的原码:0000 0110

二进制反码

由于正数的原码=反码=补码,6的反码:1000 0110
由于负数的反码=原码的最高位(符号位)不变其余位取反,-6的反码:0111 1001

二进制补码

由于正数的原码=反码=补码,6的补码:1000 0110
由于负数的补码=负数的反码+1=(负数原码最高位不变,其余取反)+1,-6的补码:0111 1010

十进制转换成二进制

十进制不断除以2,由底向上不断取余数
以6为例,6/2=3,6%2=0;3/2=1,3%2=1;1/2=0,1%2=1,由下向上取余数是110,正数的最高位是0,负数的最高位-1

二进制转换成十进制

0110二进制转换成是十进制。2º ×0+2¹×1+2²×1+2³×0=6
当前位n的值=(2ⁿ﹣¹)×当前位上的数字

位运算符

<<左移 >>右移 >>>无符号右移 &与 |或 ^异或 ~反码
当前数是a

左移<<

左移<<:二进制向左移动n位。3<<2=322=12 a<<n = a*2n

右移>>

右移>>:二进制向右移动n位。 12>>2=12/2/2=3 a>>n = a/2n

无符号右移>>>

无符号右移>>>:二进制向右移动n位。6>>2=1 a>>>n = a/2n

与&

与&:只有1&1=1,其余是0
6&3=1000 0110(二进制)&1000 0011(二进制)=1000 0010(二进制)=2(十进制)

或|

或|:只有0|0=0,其余是1
6|3=1000 0110(二进制)|1000 0011(二进制)=1000 0111(二进制)=7(十进制)

异或^

异或^: 1异或1=0,0异或0=0,0异或1=1,1异或0=0
6异或3=1000 0110(二进制)异或 1000 0011(二进制)= 1000 0101(二进制)=5

取反~

取反~:补码的各位取反
~6的步骤:
6原码 1000 0110
6补码 1000 0110
6取反步骤:
补码各位取反:0111 1001
补码转成反码:0111 1000
反码转成原码:0000 0111
~6=-7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值