位运算
来源:互联网 发布:java utf 8编码 编辑:程序博客网 时间:2024/06/08 07:54
位运算:是指二进制位的运算。
位运算符:
“按位与”运算符(&)
和高中数学中“且”逻辑运算差不多,即:0&0=0,1&0=0,0&1=0,1&1=1。
例如3&5并不等于8,而是将3和8化成二进制,按照上面的运算规律逐一进行计算。
用途:(1)清零。若想将一个单位清零,找一个二进制数让它与其进行“与”的运算 ,这个二进制数要满足原来的数中为1的位,新数中与之对应的要为0。
(2)去一个数的指定位。
(3)如果想将那一位数保存下来,进行运算时就让新数中相对应的数为1。“按位或”的运算(|)
与高中数学逻辑运算中“或”相似,两个相应的二进制只要有一个为1,该为就为1。
0|0=0,0|1=1,1|0=1,1|1=1。“异或”运算符(^)
参加运算的两个二进制位如果同号则为0,异号则为1。
0^0=0, 0^1=1, 1^0=1,1^1=0。
用途:
(1)使特定位翻转。
(2)与0相^,保留原值。
(3) 交换两个变量,不用临时变量。
设a = 3,b = 4。使两个变量的值交换。
a = a ^ b; b = b ^ a; a = a ^ b;取反运算符
将二进制数按位取反,即 使1变成0,使0变成1。而不是~1的值是-1。- 左移运算符(<<)和右移运算符(>>)
左移,弃高位补低位。
右移,弃低位补高位。(用0补)
(2)位运算举例。
(3)位段
结构体可以以位为单位作为成员(内存长度)。这种成员被称作“位段”或“位域”。
struct packed_data{ unsigned a: 2; unsigned b: 6; unsigned c: 4; unsigned d: 4; int i;}data;
- 位段成员类型要为unsigned 或int类型。
- 若某一段位段要从另一字开始存放,两端位段中间可以使用
unsigned :0。 - 一个位段必须放在一个存储单元中。
- 可以定义无名位段。如 unsigned :2,这两位空间不可用。
- 位段的长度不可以大于存储单元的长度。
- 可以用整形格式输出,也可以用%o,%u, %x。
- 位段可以在数值表达式中被引用。它会自动被系统转化成整型数。
data.a+5/data.b
阅读全文
0 0
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 用递归方法求数组的最大值
- Pycharm上安装tensorflow的方法
- 【矩阵快速幂+输入终止条件判断】Contemplation! Algebra UVA
- HTTP协议浅谈(一)之TCP长连接
- android开发:网络编程之post与get请求区别?
- 位运算
- BZOJ 1034 [ZJOI2008]泡泡堂BNB 贪心
- 顺序表应用5:有序顺序表归并
- 注入进阶之OS命令行注入
- 牛顿法与拟牛顿法
- [LeetCode] 分治之 Median of Two Sorted Arrays 课后题算法实现 Hard
- VR设备的链接与使用(脚本VRhouse)
- 算法(二):树,以及变形
- POJ3041(二分图匹配)