《带你学C带你飞》—— SE55移位和位操作应用

移位运算符

C语言除了提供四种逻辑位运算符之外,还提供了可以将某个变量中所有的二进制位进行左移或右移的运算符。

左移运算符

在这里插入图片描述
右移运算符

在这里插入图片描述
移位运算符可以和赋值运算符结合

通过移位操作可以改变变量的值

对于整型值来说,左移一位值×2,右移一位值÷2,右移两位÷4,例如:

#include <stdio.h>

int main(void)
{
	int value = 1;
	while (value < 1024)
	{
		value <<= 1;      // value = value << 1;
		printf("value = %d\n", value);
	}
	printf("\n......woshiyitiaofengexian.......\n\n");
	
	value = 1024;
	while (value > 0)
	{
		value >>= 2;
		printf("value = %d\n",value);
	}
	
	return 0;
 } 

移位做乘除效率最高。

一些未定义行为

左移、右移运算符右边的操作数如果是为负数,或者右边的操作数大于左边操作数支持的最大宽度,那么表达式的结果均是属于“未定义行为”。

左边的操作数是有符号还是无符号数其实也对移位运算符有着不同的影响。无符号数肯定没问题,尾音这时候变量里面所有的位都用于表示该数值的大小。但如果是有符号数,那就要区别对待了,因为有符号数的左边第一位是符号位,所以如果恰好这个操作数是个负数,那么移动之后是否覆盖符号我的决定权还是落到了编译器上。

位操作的应用

掩码

if((value & mask) == mask)
{
	printf("OPEN!\n");
}

打开位
关闭位
转置位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值