1、位运算
(1)位运算包括:位逻辑运算和位移运算。
位逻辑运算:
按位与:&
按位或:|
按位异或:^
按位取反:~
(2)位移运算:
左移:<< 如果左移,低位补0;相当于算术乘以2
右移:>> 如果右移,高位补0;相当于算术除以2
(3)运算规则:
&:1&0=0 0&1=0 1&1=0 有0参加的直接为0,双方为1的是1。
|:1|0=1 0|1=1 0|0=0 1|1=1 只要有1结果为1,双方为0则为0。
^:双方一样的为0,双方不同的是1。
~:~0=1 ~1=0 取反。
2、特殊运算符
(1)参与运算的表达式:总是去运算数的二进制数字串进行运算。
(2)只能作用于整数和字符串
(3)运算结果:还是一个二进制数字符串,我们需要转化十进制来得到一个整数。
3、位运算:
求负数的补码:
原码:把一个十进制的整数(e.g:10),用二进制表示,得到的二进制的字符串(e.g:00001010)。
反码:在原码的基础上逐位取反,也就是1变0,0变1(e.g:11110101)。
补码:在反码的基础上加1。(e.g:11110110)
整数的补码:就是00001010。
4、位域
概念:C语言中允许在一个结果体中以单位来指定其成员所占内存长度,这种以位为单位的成员称为“为段”或“位域”(bit field)
struct 位域结构名{
...
类型说明符 位域名:位域长度;
...
}
注意:位域长度不能超过该类型的位数。
可以无位域名,表示填充或者调整位置
(1)位段成员的类型必须是指定为unsigned或int类型
(2)若某一位段要从另一个字开始存放。
E.g:unsigned a:1;
unsigned b:2; 一个存储单元
unsigned :0;
unsigned c:3; 另一个存储单元