位运算符可处理任何类型的整型值,但是不能处理浮点值。
2.按位与运算
对两个值进行“与”运算时,会逐位比较两个值的二进制数表示。第一个值与第二个值对应位都为1时,在结果的对应位上就会得到1;其他的组合在结果中得到0.
按位“与”运算经常用于屏蔽运算。就是说,该运算符可轻易地将数据项的特定位设置为0.
3.按位或运算
对两个值进行“或”运算时,会逐位比较两个值的二进制数表示。只要第一个值或者第二个值的相应位是1,那么结果的对应位就是1.
按位或操作通常称为按位OR,用于将某个词的特定位设为1.
4.按位异或运算
按位异或运算符通常称为XOR运算符,遵守以下规则:对于两个运算数的相应位,如果任何一个位是1,但不是两者都为1,那么结果的对应位将是1,否则是0.
5.一次求反运算
一次求反运算符是一元运算。他的作用仅是对运算数的位的“翻转”,将运算数中每一个是1的位翻转为0,而将每个是0的位翻转为1.
如果不知道运算中数值的准确位大小,那么一次求反运算符非常有用,使用它可以让程序不会依赖于整数数据类型的大小。
例如:
w1 &= 0xFFFFFFFE;此语句只可以在用32位表示整数的机器上可正常工作。如果用
w1 &= ~1;替换上面的语句,那么w1在任何机器中都会和正常的值进行“与”运算。这是因为这条语句会对1求反,然后在左侧会加入足够多的1,以满足int的大小要求(在64位机器上,会在左侧的63个位加入1)。
按位与运算符的优先级要高于按位或运算符。
6.向左移位运算符
对值进行向左移位运算时,值中包含的位将向左移动。与该操作关联的是该值要移动的位数目。超出数据项的高位将丢失,而从低位移入的值总为0.
7.向右移位操作符
向右移位操作符是把值的位向右移动,从值的低位移出的位将丢失。把无符号的值向右移位总是左侧(就是高位)移入0.对于有符号值而言,左侧移入1还是0取决于被移动的数字的符号,还取决于该操作在计算机上实现的方式,如果符号位为0,不管哪种机器,都将移入0,然而,如果符号位是1,那么在一些计算机上将移入1,而其他计算机将移入0.前一种运算通常称为算术右移,后者称为逻辑右移。
注意:如果试图用大于或等于该数据项的位数将值向左或向右移位,那么objective c语言对此还没有规定。如果使用负数对值移位,结果将同样是未定义的。