C语言入门(十一)位操作

位域:允许把一个字节拆开来使用,把一个字节的二进制位划分成不同的区域,并支持命名

使用位域的做法是在结构体定义时,在结构体成员后面使用冒号和数字来表示该成员所占的位数

位域的宽度不能超过它所依附类型的长度

位域成员可以没有名称,只要给出数据类型和位宽即可

不能对位域进行取址运算

如:

struct Test

{

      unsigned int a:1;

      unsigned int b:1;

      unsigned int c:2; //对于无符号整型,最大只能为32(位宽)

      unsigned int   :3;

}

 

C语言并没有规定一个字节的尺寸:“可寻址的数据存储单位,其尺寸必须可以容纳运行环境的基本字符集的任何成员”

虽然C语言没有规定具体数据类型的位数,但编译器对各数据类型都明确定义了位数,若环境改变,定义也可能会变(

位操作

逻辑位运算符:~ 按位取反,& 按位与,^ 按位异或,| 按位或(优先级从左至右依次降低)

上述操作符除按位取反外,其他三个符号都可以跟赋值号即=号结合到一块,使代码更加简洁

 

移位运算符: 11001010 << 2 将11001010左移2位  11001010 >> 2 移位效率很高

左移、右移运算符右边的操作数如果是为负数,或者右边的操作数大于左边操作数支持的最大宽度,那么表达式的结果均是属于“未定义行为”

 

应用:1.确认位 掩码按位与运算 2.打开位 掩码按位或运算 3.关闭位 掩码按位取反并异或运算 4.转置位 掩码异或运算

 

 

 

你可能感兴趣的:(C语言)