位运算操作
使用位运算操作符可以将一个存储单位中的各个二进制位进行处理。向内存读取和写入数据的最小单位是字节,字节在操作系统中可以可以分为更小的单元“位”。如果一个字节的内容是“01101010”,其对应的值是106。但是在操作系统中,数值的存储并不是直接以其二进制存储的,而是以补码来存储的。
这里复习一下补码:非负数的补码与原码相同;负数的补码的符号位是1,其余位为将该数绝对值的原码按位取反后再加1的结果。
位运算操作符
- 取反(~):对所有位进行按位取反
- 位或(|):将两个操作数逐位进行位或运算,只要有一个数值为1,位或的结果便是1;如果都为0,位或的结果为0。
- 位与(&):将两个操作数逐位进行位与运算,只要有一个数值为0,位与的结果便是0;如果都为1,位与的结果为1。
- 异或(^):两个数一样,则值为0,如果不一样,值为1。
- 位移操作符:有符号位的右移有两种:算术右移(仍为负数)和逻辑右移(为正数)。大部分的系统采用算术右移。左移一位相当于乘2;左移 n
位,相当于乘2 的 n 次方。
位运算赋值操作符
就是将位操作符与赋值操作符组合在一起(除了取反操作)。
比如:a &= b; 相当于 a = a & b;
循环移位:移位时没有数位的丢失。循环左移时,用从左边移出的位填充字的右端;而循环右移时,用从右边移出的位填充字的左侧。