1、位运算
(1)位运算包括:位逻辑运算和位移运算。
位逻辑运算:
按位与:&
按位或:|
按位异或:^
按位取反:~
(2)位移运算:
左移:<<如果左移,低位补0;相当于算术乘以2
右移:>>如果右移,高位补0;相当于算术除以2
(3)运算规则:
&:1&0=00&1=01&1=0有0参加的直接为0,双方为1的是1。
|:1|0=10|1=10|0=01|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语言中允许在一个结果体中以单位来指定其成员所占内存长度,这种以位为单位的成员称为“为段”或“位域”(bitfield)
struct位域结构名{
...
类型说明符位域名:位域长度;
...
}
注意:位域长度不能超过该类型的位数。
可以无位域名,表示填充或者调整位置
(1)位段成员的类型必须是指定为unsigned或int类型
(2)若某一位段要从另一个字开始存放。
E.g:unsigneda:1;
unsignedb:2;一个存储单元
unsigned:0;
unsignedc:3;另一个存储单元