位运算

本文详细介绍了计算机科学中的位运算,包括左移、右移(算术右移与逻辑右移)、按位与、按位或、按位非及按位异或操作。通过具体的示例解释了这些位运算符的工作原理及其应用场景。
一、左移操作 A << B

将A的二进制左移B 位,超过32 位的截取,不足的补零。
示例:

int a = 12 ;
// 12 的二进制为:00000000 00000000 00000000 00001100
int b = 2 ;

// a << 2 = 00000000 00000000 00000000 00110000(2) =48(10)
a << b = 48  

即 左移操作的结果为A*2^B, 那是否可以写成这种方式呢,其实位运算的运算效率比算数运算效率要快,不过对于java . 编译器会做优化。

二、右移操作 A >> B

右移操作包括 算术右移逻辑右移
算术右移:带码符号位的右移A >> B, 将A 的二进制每位向右移动B 位,左边不足的位用符号位补(正数用0补,负数用1补),因此负数又移操作后还是负数,正数右移操作后还是正数。
逻辑右移:不带符号位的右一A >>> B ,将A 的二进制每位向右移动B 位,左边不足的位用0 补。 因此逻辑右移后结果都是正数。
示例:

int a = 12; 
int b = 2 ;
int c = a >> b;
// c = 00000000 00000000 00000000 00001100 >> 2 = 00000000 00000000 00000000 00000011 = 3

int d = -12 ;
int b = 2 ;
int e = a >> 2;
// e = 11111111 11111111 11111111 11110100 >> 2 = 11111111 11111111 11111111 11111101 = - 3

int d = a >>> b ;
// d = 00000000 00000000 00000000 00001100 >> 2 = 00000000 00000000 00000000 00000011 = 3

int e = d >>>b ;
// c = 11111111 11111111 11111111 11110100 >> 2 = 00111111 11111111 11111111 11111101 = 
1073741821 

最终的结果: 12 >> 2 = 3 , -12 >> 2 = -3 , 12 >>> 2 = 3 , -12 >>> 3 = 1073741821

三、按位与操作A & B

1&1 = 1 1&0 = 0 0&1 = 0 0&0 = 0

示例:

int a = 6 ;
int b = 2;
c = a & b;
// 00000000 00000000 00000000 00000110 & 00000000 00000000 00000000 00000010 = 000000000 00000000 00000000 00000010 = 2 
四、按位或操作A|B

1&1 = 1 1&0 = 1 0&1 = 1 0&0 = 0
示例:

int a = 6 ;
int b = 2;
c = a & b;
// 00000000 00000000 00000000 00000110 & 00000000 00000000 00000000 00000010 = 000000000 00000000 00000000 00000110 = 12 
五、按位非操作~A

~1 = 0 ~0 = 1
示例:

int a = 2 ;
c = ~ b;
// 00000000 00000000 00000000 00000010 
~ b = 11111111 11111111 11111111 11111101
= -3  
六、按位异或操作A^B

1&1 = 0 1&0 = 1 0&1 = 1 0&0 = 1

示例:

int a = 6 ;
int b = 2;
c = a ^ b;
// 00000000 00000000 00000000 00000110 ^ 00000000 00000000 00000000 00000010 = 00000000 00000000 00000000 00000100 = 4 

转载于:https://www.cnblogs.com/scoftlin/p/9024588.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值