- & 按位与
- | 按位或
- ^ 按位异或
- ~ 取反
- << 左移
- >> 右移
a ^= b; b ^= a;a ^= b;但并不推荐这么做,因为这样的代码读起来很费劲。
一、左移和右移
- 左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。
- 右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。但注意:对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0;而为负数时,符号位为1,最高位是补0 或是补1 取决于编译系统的规定。Turbo C 和很多系统规定为补1。
二、0x01<<2+3 的值为多少?
再看看下面的例子:0x01<<2+3;
0x01<<2+30;或0x01<<2-3;
这样行吗?不行。一个整型数长度为32 位,左移32 位发生了什么事情?溢出!左移-1位呢?反过来移?所以,左移和右移的位数是有讲究的。左移和右移的位数不能大于数据的长度,不能小于0。