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;
}