【C语言】利用队列的思维理解移位运算符和移位函数

在c语言中,尤其是单片机的C51中,移位运算操作很常见。实现移位操作的方法有两种:一是利用移位运算符,二是利用移位函数。

目录

一、移位运算符

1、左移

2、右移

二、循环移位函数

三、移位运算符和循环移位的区别

1、是否需要包含头文件

2、移出位后是否舍弃

3、用队列的思维理解二者区别

四、实例说明


一、移位运算符

在c和c++中,移位运算符有双目移位运算符:<<(左移)和>>(右移)。移位运算符组成的表达式也属于算术表达式,其值为算术值。

1、左移

左移运算符号为“<<”,这个运算符作用是将一个二进制位的操作数按指定移动的位数向左移动,移出位被丢弃,右边移出的空位一律补0。

2、右移

右移运算符号为“>>”,这个运算符作用是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位一律补0,或者补符号位,这由不同的机器而定。


二、循环移位函数

顾名思义,循环移位函数是一个函数操作,可以对一个数据进行循环移位操作,循环的意思是移出位的那位二进制数,不是进行舍弃,而是又从另外一端补位进来。

循环移位函数有两个参数,格式为_xxx_(c,b)。c为要移位的数据,b为移动的位数。移位函数一共有6个:
_crol_: 字符循环左移
_cror_: 字符循环右移
_irol_: 整数循环左移
_iror_: 整数循环右移
_lrol_: 长整数循环左移
_lror_: 长整数循环右移

三、移位运算符和循环移位的区别

既然移位运算符和循环移位函数都可以进行移位操作,那么二者有什么区别呢?


1、是否需要包含头文件


移位运算符,是系统内置的运算操作,编译编译不用包含相关头文件;而移位函数编译要包含intrins.h头文件。



2、移出位后是否舍弃


<<和>>的移位规则数据从一端移动到另外一端,数据尾部移走后会补0,数据头部移到最前端后会溢出,溢出的数据就被抹掉了。
_crol_等函数是是循环移位,首位相接,数据前端移动到尾部后,会从尾部再次进入队列,数据不会溢出。

3、用队列的思维理解二者区别

运算符是线性队列,循环移位函数是环形队列。

四、实例说明

举例说明,对于一个char型的数据:1,利用左移运算符操作8次后的结果是0,利用循环字符左移函数操作_crol_(1,8)后的结果是128。
图1为左移运算符<<操作的示意图,图2为_crol_()函数操作的示意图。

图1 线性队列

图2 循环队列
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值