位运算
在很多系统程序中常要求在位(bit)一级进行运算或处理,C语言提供了位运算的功能,使得C语言也能像汇编语言一样用来编写系统程序,位运算共有 & | ^ ~ << >> 这六种。
1.1.1按位与运算
按位与运算”&”是双目运算符。按位运算通常用来对某些位清0 或者 保留某些位,如把a的高8位清0,保留低8位,与作&255运算(255的二制数为0000000011111111)。参与运算的数以补码形式出现。如9&5运算过程:
00001001
& 00000101
00000001 (结果为1)
1.1.2 按位或运算
按位或是双目运算符。通常用来对某些数保留某些位,清0某些位,参与运算的两个数以补码出现。
1.1.3 按位异或运算
按位异或运算符 ” ^ ” 是双目运算符,功能是参与运算的两个数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算的数以补码出现,如9^5:
00001001
^ 00000101
00001100 (结果是12)
1.1.4 求反运算
求反运算符 ~ 为单目运算符,具有结合性。其功能是对参与运算的数的各二进位按位求反。如~9:
~(0000000000001001)结果为:1111111111110110
1.1.5 左移运算
左移运算符 << 是双目运算符。功能是高位丢弃,低位补0 。
1.1.6 右移运算
右移运算符 >> 是双目运算符。功能是把 “>>” 左边的运算数的各二进位全部右移若干位,” >> “ 右边的数指定移动的位数。
对于有负号数,在右移时,符号位将随同移动。当为下数时,最高位补0,而为负数时,符号为1,最高位是补0或是补1取决于编译系统的规定。Turbo C和很多系统规定为补1。