㈠ 请问C51单片机的循环左移和循环右移函数中的“循环”是指什么
C51单片机的循环左移函数是,_crol_(变量名,n),循环右移函数是,_cror_(变量名,n),函数中的“循环”是指变量的8位二进制数依次向左移一位,或向右移一位。
你比如的,取8位数,让1111 1110循环左移一位,就是在1111 1110、1111 1101、1111 1011、1111 0111、1110 1111,等等,每移位一次,8位数向左或向右移一位。继续移位,就会循环重复的。
㈡ 单片机里RL A是循环向左移一位(不带进位),为什么相当于把A乘2
<< : 是左移指令,低位补零。移出去的就消失了。
ROL: 循环左移指令,低位补高位移除的数据。
这是因为计算机的数值在单片机里都是二进制的数值,对它进行左移一位,,相当于每一位都进了一位。例如数值2,用二进制表示为0010,左移一位变成了4,即0100。
例如: 1000,0001 b,
a = 1000,0001 b << 1; 则: a = 0000,0010 b;
a = ROL 1000,0001 b,1; 则: a = 0000,0011 b;
补充:
循环左移ROL(Rotate Left):移出的位不仅要进入CF,而且还要填补空出的位。
带进位的循环左移RCL(Rotate Left Through Carry):用原CF的值填补空出的位,移出的位再进入CF。
(2)单片机循环左移扩展阅读
算术左移=逻辑左移
说明:算术左移和逻辑左移一样都是右边补0:比如 00101011
算术左移一位:01010110
逻辑左移一位:01010110
(对于二进制的数值来说左移n位等于原来的数值乘以2的n次方。比如00011010十进制是26,左移两位后是01101000转成十进制是104恰好是26的4倍。)
注:这种倍数关系只适用于左移后被舍弃的高位不含1的情况,否则会溢出。
逻辑右移很简单,只要将二进制数整体右移,左边补0即可,如10101101逻辑右移一位为01010110
算术右移符号位要一起移动,并且在左边补上符号位,也就是如果符号位是1就补1符号位是0就补0 比如:11100算术右移一位为11110(符号位1跟着一起移动并且左边补了1)
(对于二进制的数值来说右移n位等于原来的数值除以2的n次方,比如10110100十进制是76(需要先将这个补码转换成原码之后再转换成十进制),右移两位后是11101101转成十进制是19恰好是76的1/4倍。)
㈢ 51单片机如何在一个工程中同时加入循环左移和循环右移,
这个问题很简单,因为循环左移和循环右移并不相互排斥,可以单独存在,不仅仅在一个工程中,在用一个文件或者同一个程序段中都是可以的。比如。
#include<reg51.h>
#include<intrins.h>
void delay(int a)
{
int i,j;
for(i=0;i<a;i++)
for(j=0;j<110;j++);
}
main()
{
unsigned char led1=0xfe,led2=0x7f;
while(1)
{
P0=_crol_(led1);
P1=_cror_(led2);
delay(100);
}
}
㈣ 单片机循环右移,用c怎么表示
那里用楼上两位那样罗嗦。
#include <intrins.h>
加入上述的头文件,不光解决了循环右移,还有循环左移的函数,8位、16位的都有。
㈤ 单片机循环左移
增加一个全局变量,将循环常数给变量,再对变量做左循环,将变量赋值给P0,
uchar a,b, c;
在主循环中P0=_crol_(P0,1); //P0的值向左循环移动
修改为
c=_crol_(c,1); //P0的值向左循环移动
P0=c;
㈥ 单片机中对16位数进行循环左移和算术左移的区别
比如1010 0100 1010 1100,循环左移一位就是高位(第15位)移出放到最低位(第0位),其它位依次往高位移动一位,结果是0100 1001 0101 1001,循环左移两位就变成了1001 0010 1011 0010,算术左移就是移出去的高位丢失,依次往最低位补0,算术左移一位结果是0100 1001 0101 1000,算术左移两位是1001 0010 1011 0000,希望对你有帮助
㈦ 单片机里不引用_crol_(a,1)函数的循环左移和右移的程序是什么样的
左移: Data<<=1;
右移: Data>>=1;
循环左移:Data=(Data<<1) | ((Data & 0x80)>>7);
循环右移:Data=(Data>>1) | ((Data & 0x01)<<7);
㈧ 单片机中整数循环左移_irol,整数循环右移_iror。这个整数怎么移位的呢 位移位我懂。
_crol_ 字符循环左移
_cror_ 字符循环右移
_irol_ 整数循环左移
_iror_ 整数循环右移
_lrol_ 长整数循环左移
_lror_ 长整数循环右移
你的这个结果是错的
a = 0xA5A5;
b = _irol_(a,1) ; 执行后 b=0x4b4b;
按照你的结果应给是这样:
a = 0xA5A5;
b = _iror_(a,1) ; 执行后 b=0xd2d2;
PS: _iror_(a,1) 表示把变量a 循环右移1位
㈨ 单片机c语言里的循环左移指令_crol_的格式是这指令是每秒循环左移一次还是怎么移主要用在什么场合,本
汇编忘记了
c的话 dat<<1
不是每秒循环左移,1代表左移1位,超出部分忽略
--------------
常用的场合:
u8 a;
for( u8 i=0,j=0x01; i<8; i++,j<<=1 )
{
if( a&j )
{
//a的第i位为1
}
}
-----------------
运算的时候也常用到 左移一位 只要不超出范围 相当于×2
㈩ 单片机 左移函数是怎么用的
左循环本征函数:
函数原型:unsigned char _crol_(unsigned char a,unsigned char n);
单片机左移函数用法:
例如,P2=0xff; P2=_crol_(P2,1);//语法是对的,但这是没意义的,因为执行程序后P2还是原值0xff
P2=0xfe; P2=_crol_(P2,1);//执行程序后P2=0xfd
(10)单片机循环左移扩展阅读:
单片机相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。单片机也被称为单片微控器,属于一种集成式电路芯片。
在单片机中主要包含CPU、只读存储器ROM和随机存储器RAM等,多样化数据采集与控制系统能够让单片机完成各项复杂的运算,无论是对运算符号进行控制,还是对系统下达运算指令都能通过单片机完成。