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

Posted lanxiaofang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位算符详解 按位与或异或取反左移右移相关的知识,希望对你有一定的参考价值。

1.按位与(&)

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

3&-2
结果:2

位算符详解

2.按位或(|)

int a = 3, b = -2 ,

3|-2
结果:-1

位算符详解

3.按位异或(^)

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

3^-2
结果:-3

位算符详解

4.按位取反(~)

int a=18, b = ~ a;

~2
结果:-3

位算符详解

5.左移(<<)

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

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

32>>3
结果:4

用来将一个数的各二进制位全部左移若干位,移动的位数由右操作数指定,右操作数必须是非负值,其右边空出的位用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、逻辑右移:丢弃最低位,向右移位,左边空出来的位置补0

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

以上是关于位算符详解 按位与或异或取反左移右移的主要内容,如果未能解决你的问题,请参考以下文章

C语言位运算符:与或异或取反左移与右移详细介绍

移位位与或异或非

C言语位运算

C语言--位运算

位运算

Python 基础1 - 位运算符