1.位与运算 &
注意:& 和 && 是有区别的。前面这个是位与运算,后者是逻辑与运算,也就是算数运算1 1 1 1 0 1 0 1 看看位与运算的真值表 结论:全真为真。其他为假0 & 1 01 & 0 01 & 1 10 & 0 00x5b 5 0101 例如:0xb5 & 0123 0x1100110111001010111100000101110 02e0x2c & 0x2b 0x2811001010 10002.位或运算真值表0 | 0 00 | 1 11 | 0 11 | 1 1位或运算 (|)和逻辑或(||)区别区别和上面的与类似 有1就为1027 | 0x74 0010 01110111 01010111 0111 0x770x1f | 0xa5 0xbf0x5f | 0x50 0x5f3、位异或 (^)真值表;1 ^ 0 11 ^ 1 00 ^ 0 00 ^ 1 1从真值表能得出结论:相同的就为0,不同的为1异或就是相当于把两个相异的进行或操作25 ^ 0263 b30x5f ^ 0xa4 0xfb0101 11111010 0100 1111 1011 0xfb0x47 & 0x38 0xa5 | 0x4f 0x14 ^ 01240x0 0xef 0x40 0x004 0xa80000101000010101000100 00004、位取反 ~注意:在C语言中位取反是~,逻辑取反!规则:把二进制数进行一个变化。1变成0,0变成1总结:任何非0的数被逻辑取反在取反就会得到1; 任何非0数被位取反在取反就会得到本身;~0x5f ~0124 ~470xa0 065 0x2b总结:5.左移动 << 右移动 >>在c语言中,进行位左移操作的时候要取决于数据类型对于无符号数,左移时右侧补0对于无符号数,右移动左侧补0;对于有符号数, 左移动时右侧补0对于有符号数,右移时左侧补符号位(如果是正数就补0,负数补1);在嵌入式中。在研究位移动,为了方便、快捷。我们规定移位都是无符号的数。6.左移 <<s数<< 多少位0x54 <<2 0101 0100 0101 0000 0x500xf4 <<1 0x6b<<60xe8 0xc07.右移 数>> 多少位0x54 >>2 01010100 0xf4 >>4 0xd1 >>10x0f 0x68升级:0x17 bit2变成000010111 结果:00010011 0x13&11111011 取反:00000100 把1进行变化00000001 ~(1<<2) & 0x170001 1011 0x1b bit2变成1;0001 11110001101100000100 或运算 0001111100000100 和00000001 (1<<2) | 0x1b 00011111