admin管理员组

文章数量:1794759

C语言的位运算符

C语言的位运算符

说明

由于平常比较少用位运算符直接处理数据,已逐渐忘记位运算符,但最近在刷算法时发现位运算符在处理数据时很方便,通过这篇文章来重新熟悉一下位运算符。

C语言的六种位运算符

位运算是指按二进制进行的运算,C语言提供了6个位操作运算符: 按位与: & 按位或: | 按位异或: ^ 按位非(取反): ~ 左移: << 右移: >>

这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型

1,按位与运算 &

如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。 例:

int n1,n2,n3; n1=0;n2=1; //n1的二进制补码:00000000,n2的二进制补码:00000001 n3=n1&n2; //n3的二进制补码:00000000 n1=1;n2=1; //n1:00000001,n2:00000001 n3=n1&n2; //n3:00000001 2,按位或运算 |

如果两个相应的二进制位中只要有一个1,则该位的结果值为1,否则为0。 例:

int n1,n2,n3; n1=0;n2=1; //n1的二进制补码:00000000,n2的二进制补码:00000001 n3=n1|n2; //n3的二进制补码:00000001 n1=1;n2=1; //n1:00000001,n2:00000001 n3=n1|n2; //n3:00000001 3,按位异或运算 ^

如果两个相应的二进制位相同,则该位的结果值为0,否则为1。 例:

int n1,n2,n3; n1=0;n2=1; //n1的二进制补码:00000000,n2的二进制补码:00000001 n3=n1^n2; //n3的二进制补码:00000001 n1=1;n2=1; //n1:00000001,n2:00000001 n3=n1^n2; //n3:00000000 n1=15;n2=3; //n1:00001111,n2:00000011 n3=n1^n2; //n3:00001100 4,按位非(取反) ~

~ 是一元运算符,用来对二进制数按位取反,即将0变1,将1变0。 例:

int n1,n2; n1=0; //n1的二进制补码:00000000 n2=~n1; //n2的二进制补码:11111111 n1=1; //n1:00000001 n2=~n1; //n2:11111110 5,左移 <<

将一个数的各二进制位全部左移N位,右补0,即将一个数乘2^n; 例:

int n1,n2; n1=1; //n1的二进制补码:00000001 n2=n1<<1; //n2的二进制补码:00000010 n1=6; //n1:00000110 n2=n1<<2; //n2:00011000 6,右移 >>

将一个数的各二进制位全部右移N位,移到右端的低位被舍弃,即将一个整数型除2^n; 例:

int n1,n2; n1=2; //n1的二进制补码:00000010 n2=n1>>1; //n2的二进制补码:00000001 n1=6; //n1:00000110 n2=n1>>2; //n2:000001 注意

位运算符的操作数必须是整数类型,并且遵循寻常算术转换。 寻常算术转换:如果 某个操作符 的各个操作数属于 不同的类型 ,那么除非其中一个操作数 转换 为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为 寻常算术转换。

如果某个操作数的类型在上面这个列表中 排名较低,那么首先要转换为 另外一个操作数 的类型后 执行运算。

本文标签: 运算符语言