admin管理员组文章数量:1794759
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 注意位运算符的操作数必须是整数类型,并且遵循寻常算术转换。 寻常算术转换:如果 某个操作符 的各个操作数属于 不同的类型 ,那么除非其中一个操作数 转换 为另一个操作数的类型,否则操作就无法进行。下面的层次体系称为 寻常算术转换。
如果某个操作数的类型在上面这个列表中 排名较低,那么首先要转换为 另外一个操作数 的类型后 执行运算。
版权声明:本文标题:C语言的位运算符 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686623774a87614.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论