(1<<8)&0xFF00
即 (1 * 2^8) & 0xFF00 = 0x0100 & 0xFF00 = 0x0100。
0x0001左移八位等于0x0100 再与上0xff00 结果为0x0100。。
只有这一句话只能这样了,意图可能是串行传数据,分离出每个bit位用的吧。。
位运算总共只有5种运算:与、或、异或、左移、右移。如下表:
与(&) | 0 & 0 = 0 | 1 & 0 = 0 | 0 & 1 = 0 | 1 & 1 = 1 |
或(|) | 0 | 0 = 0 | 1 | 0 = 1 | 0 | 1 = 1 | 1 | 1 = 1 |
异或(^) | 0 ^ 0 = 0 | 1 ^ 0 = 1 | 0 ^ 1 = 1 | 1 ^ 1 = 0 |
a<<1左移运算,二进制的11,操作后为110,相当于乘2
a>>1右移运算,二进制的111和110,操作后都为11,相当于除2
a&b与运算,二进制的100与上110,操作后为100,也就是按位与
a|b或运算,二进制的100或上110,操作后为110,也就是按位或
a^b异或运算,二进制的100异或110,操作后为010,也就是按位异或
如何提取二进制的某一位
求10(1010)的第三位数
10>>(3-1)&1=1
C++中int类型的变量固定为4个字节,&后面的1表示int型32位,比特位 0-31,从0开始取位
int类型变量初始值一般为0,范围[-2^31 , 2^31 -1] 即 [-2147483648,2147483647]
整型常量有3种表示方式:
①十进制整数。例如,123、-2、0。
②八进制整数
八进制英文是Octal,缩写OCT或O,O与0外形相近,C语言就借用了数字0来表示8进制数,这是不能省略的。
例如,012,等于十进制数10。
③十六进制整数。
以ox或0x开头的整数是十六进制数,十六进制的英文是hexadecimal,怎么不用0H呢?不知道是不是从希腊文借用而来。也可以用H表示十六进制的。
例如,0xff01,等于十进制1
如果在整型常量后面加上字母u或u,则表示无符号整数(unsigned int)。例如,123U或123u是unsigned int型的。如果在整型常量后面加上一个字母L或l,则表示长整数(10ngint)。例如123l是long int型的。