按位运算的运算符
移位的时候不能有负数!!!
按位运算符 | 意思及运用 |
---|---|
按位异或^ | 若两个为相等,则计算结果为0;否则为1 |
按位与& | 若两个位都为1,计算结果为1;否则为0 |
按位或| | 若两个位其中一个为1,计算结果为1;否则为0 |
按位取反~ | 把1位变成0,0位变成1 |
左移<< | i << j : 把i中所有的为向左移动j个位置,空余部位填0,等价这个数乘以2的j次方(所有小于int的类型,移位以int的方式来做,结果是int) |
右移>> | i >> j : 把i中所有的为向右移动j个位置,空余部位填0,等价这个数除以2的j次方(所有小于int的类型,移位以int的方式来做,结果是int ; 对于unsigned类型,左边填入0;对于signed类型,左边填入原来的最高位,即保持符号不变) |
位段
定义位段后,可直接用位段成员名称(与结构相似)访问
若所需要的位超过一个int(即32个比特),编译器会自动变成两个int来存储
struct {
unsigned int leading : 3;//位段leading大小为3比特
unsigned int flag1 : 1;//位段flag1大小为1比特
unsigned int flag2 : 1;//位段flag2大小为1比特
int trailing : 27;//位段realing大小为27比特
};