位操作笔记

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值