很多系统程序都要求再bit (位)一级进行运算或处理。
位运算原本属于汇编语言的功能,。
C语言也提供了一些类似汇编语言的功能。
位运算,是以二进制位单位进行运算的。
例如:一个char型数据占据8个(二进制)位,t.e.一个byte(字节),则
最右边的二进制位称为第0位,最左边的为最高位(即,符号位)。
位 运 算 符 { 逻 辑 运 算 符 移 位 运 算 符 自 反 赋 值 运 算 符 位运算符\left\{ \begin{array}{rcl} 逻辑运算符\\ 移位运算符\\ 自反赋值运算符\\ \end{array} \right. 位运算符⎩⎨⎧逻辑运算符移位运算符自反赋值运算符
位逻辑运算符
- ~ 非:对二进制每一位取反计算(~0=1;~1=0)
- & 与: 只有对应的两个二进制位均为1时,结果位才为1,否则为0;(通常用于对于某些位置清零,根据对应位为1,才为1的原则,找一个特定数来跟它“按位与”,用来中和它1的位)
- | 或: a|b 的意思是 只要有一个为1,结果位就为1. (可以把数据的某些位置变为1,只需要找特定数的相应位置为1即可)
- ^ 异或: 当两对应的二进位上的数不相同时,结果为1(可以用来将某些数上的位翻转)
注释:关于数制的转换与存储:
二进制最高位是“符号位” 1表示负数,0为正数。
对于正数:将数转换位二进制;反码、补码 与原码相同。
对于负数:先按照绝对值转化位二进制,最高位为1;它的反码是:将除了最高位之外的所有位 按位取反。补码是将其二进制的反码加1;
位移位运算符
左移(<<) a<<b: 将二进制数a所有位向左移动b个单位,高位溢出即舍弃,低位补0.
右移(>>) a>>b: 将a所有位向右移动b个单位,低位溢出即舍弃,无符号整型数据高位补0(有符号位的数据:符号位为0(正数)时都补0,符号位为1(负数)时补0或1 看计算机系统)
位自反赋值运算符
即,复合赋值运算符(使用位运算符的复合赋值运算)
例如: a&=b =》a=a&b
|=
^=
<<= (>>=)