1.基本位运算符:~(取反)、&(与)、|(或)、^(异或)、<<(左移)、>>(右移) 2.复合位运算符:&=、|=、^=、>>=、<<= 3.每个八进制位对应三个二进制位,每个十六进制位对应四个二进制位,一般常使用八进制在具体程序中是为了更接近计算机表达方式 4.按位运算符的优先级比==低 5.编程实例:要求使用位操作的原理将用户输入的整数转换位二进制形式,见程序binbit.c
/* binbit.c -- 使用位操作显示二进制 */ #include <stdio.h> #include <limits.h>//提供CHAR_BIT的定义,其表示每字节的位数 char * itobs(int, char *);//数值转换 void show_bstr(const char *); int invert_end(int , int ); int main(void) { char bin_str[CHAR_BIT*sizeof(int)+1]; int number; while(scanf("%d",&number)==1) { itobs(number,bin_str);//转换为二进制字符串 printf("%d is ",number); show_bstr(bin_str);//输出转换前的子串 putchar('\n'); number=invert_end(number,4); show_bstr(itobs(number,bin_str));//输出转换后的子串 putchar('\n'); } puts("Bye!"); return 0; } char *itobs(int number ,char * str) { const static int size = CHAR_BIT * sizeof(int); for(int i = size-1;i >= 0;i-- , number >>= 1) str[i] = (01&number) + '0'; str[size] = '\0'; return str; } /* 每4位一组显示二进制字符串 */ void show_bstr(const char *str) { int i=0; while(str[i]) { putchar(str[i]); if(++i%4==0&&str[i]) putchar(' '); } } /* 用于切换一个值中的后n位,待处理值和n均为参数*/ int invert_end(int num ,int bits) { int mask = 0;//设置初始掩码为0 int bitval = 1; while(bits-- > 0)//通过while循环找到需要的掩码 { mask |= bitval; bitval <<= 1; } return num^mask; }