C语言位运算
来源:互联网 发布:bot的知识图谱数据api 编辑:程序博客网 时间:2024/06/16 13:35
定义
位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。
位运算符类型
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<< 左移 用来将一个数的各二进制位全部左移N位,右补0
还有>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0
#include <stdio.h>int main(){ /* 按位与 & 10101010000 00000100000 ------------- 00000000000 10111011 10101101 --------- 10101001 1001 0101 ----- 0001 */ /* 按位或 | 1001 0101 ----- 1101 */ /* 按位异或 ^ 1.相同数值进行异或,结果肯定是0,比如9^9 2.交换 9^5^6 == 9^6^5 3.任何数值跟0进行异或,结果还是原来的数值,9^0 == 9 4.a^b^a == a^a^b == 0^b == b 1001 0101 ----- 1100 1001 1001 ----- 00000 0101 0000 ---- 0101 9^5^9 == 9^9^5 = 0^5 = 5 a^b^a == b */ //printf("%d\n", 9^9); //printf("%d\n", 9 ^ 5); /* 按位取反 ~ ~0000 0000 0000 0000 0000 0000 0000 1001 1111 1111 1111 1111 1111 1111 1111 0110 */ //printf("%d\n", ~9); /* 左移 << 0000 0000 0000 0000 0000 0000 0000 0000 00 0000 0000 0000 0000 0000 0000 100100 9<<1 -> 9 * 2的1次方 == 18 9<<2 -> 9 * 2的2次方 ==36 9<<n -> 9 * 2的n次方 */ //printf("%d\n", 9<<1); /* 右移 >> 0000 0000 0000 0000 0000 0000 0000 0000 000000 0000 0000 0000 0000 0000 0000 10 111111 1111 1111 1111 1111 1111 1111 10 8>>1 -> 8/2 == 4 8>>2 -> 8/2的2次方 == 2 8>>n -> 8/2的n次方 */ printf("%d\n", 8>>3); return 0;}
0 0
- C语言位运算
- C语言位运算
- C语言位运算
- c语言位运算
- C语言位运算
- c语言位运算
- C语言位运算
- c语言位运算
- C语言位运算
- C语言位运算
- C语言位运算
- C语言位运算
- c语言位运算
- C语言位运算
- c语言位运算
- C语言位运算
- C语言位运算
- c语言位运算
- 实习入职第一周
- leetcode笔记:Sum Root to Leaf Numbers
- GDI+之验证码
- 怎样搭高质量的Android项目框架,框架的结构具体描述?
- 1035. 插入与归并(25)
- C语言位运算
- HDU 1009 FatMouse' Trade
- APK反编译二次打包实例-消除apk底部广告
- fields must be fully assigned before control is returned to the caller解决方案
- oc基础之分类与协议(五)
- [leetcode151] Reverse Words in a String
- 1017. A除以B (20)
- 代理模式
- 简单的Java入门代码