逻辑运算与移位运算

源码:正数的补码与原码相同例+7 源码:00000111 补码 :00000111  (用8位二进制表示一个数)


负数的补码:
符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
-7 源码: 10000111 ,其绝对值为00000111 取反加一:11111001 为-7补码

已知一个数的补码,求原码的操作分两种情况:
 
(1)如果补码的符号位为“0”,表示是一个正数,其原码就是补码。 
 (2)如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。


补码:00001111 ->原码:00001111
补码:11110001 -> 01110001 取反加一 -> 原码:10001111


逻辑运算:异或("^")
其运算法则为: a^b=(a' and b) or (a and b') (a'为非a)
0 ^ 1 得 1, 1 ^ 1 得 0 ,0 ^ 0 得 0,1 ^ 0 得 1

 左移位:<<,有符号的移位操作
左移操作时将运算数的二进制码整体左移指定位数,左移之后的空位用0补充

右移位:>>,有符号的移位操作
右移操作是将运算数的二进制码整体右移指定位数,右移之后的空位用符号位补充,
如果是正数用0补充,负数用1补充。
System.out.println(3<<2);//3左移2位 0000 0011 ==> 000000 1100
System.out.println(-3<<2);//-3左移2位 1000 0011 ==> 1000 001100
System.out.println(6>>2);//6右移2位 0000 0110 ==> 0000 0001|10
System.out.println(-6>>2);//-6右移2位
1000 0110--->0000 0110(绝对值)--> 1111 1010(补码)-->1111 1110 |10
--> 1111 1110
求1111 1110的源码--> 0111 1110--> 1000 0010--> -2


无符号的移位“>>>”:无符号的移位只有右移,没有左移使用“>>>”进行移位,都补充0
System.out.println(6>>>2); //1
System.out.println(-6>>>2); //1073741822


00000000 00000000 00000000 00000110 +6在计算机中表示方法
11111111 11111111 11111111 11111001
11111111 11111111 11111111 11111010 -6(补码)在计算机中的表示
0011111111 11111111 11111111 11111010 右移两位,补充0,结果为1073741822
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值