位操作
掩码
置1某位:
按位或操作用于打开某一位,同时保持其他位不变。
将0x1000第二位置一
0x1000 = 0x1000 | (1<<2));
0x1000 |= (1<<2);
清0某位:
按位与和按位或操作可以组合成关闭某一位,同时保持其他位不变。
将0x1000第二位清零
0x1000 = 0x1000 & (~(1<<2));
0x1000 &= ~(1<<2);
&:按位与
按位与运算符(&)通过两个运算对象形成一个值。如果两运算对象中相同号位都为1,那么该值中对应的位为1;否则,该位为0。
|:按位或
按位或运算符(|)同样通过两个运算对象形成一个值。如果两运算对象中相同号位有一个为1或都为1,那么该值中对应的位为1;否则,该位为0。
~:按位取反
~运算符将其运算对象的每一位取反,将1转为0,0转为1。
^:按位异或
按位异或运算符(^)也有类似的操作,只有两运算对象中相同号位有一个为1时,结果值中对应的位才为1。
相同为0,不同为1。
真值 原码 反码 补码
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
正整数的原码,反码,补码都相同,符号位为0,其他数值相同。
负整数的原码,反码,补码,需要先求原码,再求反码,最后求补码。
真值
就是现实中的数字(二进制)必须有+/-,实际中整数舍弃了+。
原码
计算机中唯一标识一个真值,但是不能用于计算以及无法实现减法,会产生二异性(+0,-0)
求法:正数的原码是其补全位数后前面加0,负数的原码是是其补齐位数后去掉-,在前面加1
反码
正数的反码是其本身。
负数的反码是其原码的基础上,符号位不变,其余位取反。
补码
正数的补码是其本身。
负数的补码是其原码的基础上,符号位不变,其余位取反,最后加1。(在其反码的基础上+1)
将补码最高位符号位变为数据有效位
data为24位数据,异或0x800000,会将最高位变为数据有效位。
当data=0x800000时:
0 = 800000 ^ 0x800000
当data=0x7FFFFF时:
FFFFFF = 7FFFFF ^ 0x800000
经过异或运算,就将data的变化范围由(0x800000 - 0x7FFFFFF)转变为了(0 - 0xFFFFFF)
进制转换
位:1bit
字节:1byte = 8bit
半字:半字 = 2byte = 16bit
字:字 = 4byte = 32bit
2进制:逢二进一
8进制:逢八进一
10进制:逢十进一
16进制:逢十六进一
移位运算符
左移 <<
左移相当于乘以2的n次幂
右移 >>
如果变量不为负数,右移相当于除以2的n次幂