当前位置:网站首页>位算符详解 按位与、或、异或、取反、左移、右移

位算符详解 按位与、或、异或、取反、左移、右移

2022-08-10 18:12:00 51CTO

1.按位与(&)

int a = 3, b = -2 , c = a & b ;

      
      
3&-2
结果:2
  • 1.
  • 2.

位算符详解 按位与、或、异或、取反、左移、右移_二进制数

2.按位或(|)

int a = 3, b = -2 ,

      
      
3|-2
结果:-1
  • 1.
  • 2.

位算符详解 按位与、或、异或、取反、左移、右移_操作数_02

3.按位异或(^)

int a = 3, b = -2 , c = a ^ b ;

      
      
3^-2
结果:-3
  • 1.
  • 2.

位算符详解 按位与、或、异或、取反、左移、右移_十进制数_03

4.按位取反(~)

int a=18, b = ~ a;

      
      
~2
结果:-3
  • 1.
  • 2.

位算符详解 按位与、或、异或、取反、左移、右移_位算符_04

5.左移(<<)

<<  :左移 左边最高位丢弃,右边补齐0

在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方

      
      
32>>3
结果:4
  • 1.
  • 2.

用来将一个数的各二进制位全部左移若干位,移动的位数由右操作数指定,右操作数必须是非负值,其右边空出的位用0填补,高位左移溢出则舍弃该高位。

左移表达式的的位 result = expression1 << expression2

参数 result,任何变量。

expression1,任何表达式,需要移位的数字。

expression2,任何表达式,移位的次数。

用来将一个数的各二进制位全部左移若干位。例如:

将a的二进制数左移2位,右补0。若a=15,即二进制数00001111,左移2位得00111100,即十进制数60(为简单起见,用8位二进制数表示十进制数15,如果用左移运算符16位二进制数表示,结果是一样的)。

高位左移后溢出,舍弃。

左移一位相当于该数乘以2,左移2位相当于该数乘以2^2=4。上面举的例子15<< 2=60,即乘了4。但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。

例如,假设以一个字节(8位)存一个整数,若a为无符号整型变量,则a=64,即二进制数01000000时,左移一位时溢出的de是0。而左移2位时,溢出的高位中包含1,则不符合上述结论。

由下表可以看出,若a的值为64,在左移一位后相当于乘2,左移2位后,值等于256。

简单介绍一种方便计算的方法:

8 << 1的值为8*2=16;

8 << 2的值为8*(2^2)=32;

8 << n的值为8*(2^n)。

数学意义:

在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

6.右移(>>)

>> :右移 最高位是0,左边补齐0;最高为是1,左边补齐1

右移一位相当于除2,右移n位相当于除以2的n次方。

      
      
2 <<3
结果:16
  • 1.
  • 2.

右移有两种:

1、逻辑右移:丢弃最低位,向右移位,左边空出来的位置补0

2、算术右移:丢弃最低位,向右移位,左边空出来的位置补原来的符号位(即补最高位)

原网站

版权声明
本文为[51CTO]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_15668438/5563616