大家好,我想问一下单片机C语言中有没有带进位的循环右移或者左移的指令,与汇编语言中的RRC或者RLC类似。

如题所述

第1个回答  推荐于2016-09-30
C语言中没有提供循环移位的操作符,但可以通过简洁的方式实现循环移位
设一个操作数x有s位则循环左移n位的操作为:
(x << n) | (x >> (s - n));
同理右移n位位:
(x >> n) | (x << (s - n));
你可以#define XX (x<<n) | (x>>(s-n)
。。。
补充下:上面是当 n<=s的情况 当n>s的话 只要把n改为 (n%s)就可以了追问

你好,请问一下,#define XX (x>(s-n)之后我要调用XX该如何实现了,例如S为8,我要左移i位,该如何书写程序了。

追答

比如可以这样啊 #define CLEFT(int x,int s,int n) (x>(s-(s%n)))
试试把。。调用的时候 就是CLFFT(x, 8,3)

本回答被提问者采纳

单片机C语言左移或右移多位是一次完成的吗?
#0x01 39: P0 = xx << 3; ---C语言C:0x0091 EF MOV A,R7C:0x0092 33 RLC A--真是左移三次C:0x0093 33 RLC AC:0x0094 33 RLC AC:0x0095 54F8 ANL A,#0xF8C:0x0097 F580...

循环左移 和循环右移是什么意思啊
1、将x左端的n位先移动到y的低n位中,x>>(32-n);2、将x左移n位,其右面低位补0,x<<n;3、进行按位或运算(x >> (32 - n) | (x << n));循环右移的过程可以分为3步:1、将x的左端的低n位先移动到y的高n位中x<<(32-n)2、将x右移n位,其左面高n位补0x>>n;3、进行...

关于左移的问题,在汇编和C语言是否相同??
汇编中的移位指令有很多种,有逻辑移位,算数移位,循环移位等,并且用汇编语言可以判断移位指令执行之后所影响的标志位,而C语言好像只能进行逻辑移位,并且好像不能判断标志位 刚才用MVC试了一下,不管变量定义成int还是unsigned int执行的都是逻辑移位 看你的指令好像是单片的,虽然我说的是电脑上的,不过和...

c语言中的左调整和右调整是什么意思?
总之,在C中,左移是逻辑\/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左\/右移做快速的乘\/除运算,这样会比循环效率高很多.

...跟RRC(右移包括CY位)指令用c语言分别怎么表达吗?能举个例子吗?先...
你好,我了解C语言对51单片机的编程,对汇编不是很了解。我粗略看了一下,发现汇编的位移操作比C语言复杂很多,c语言的位移操作无非两个运算符:>>(右移)和<<(左移)比如:0x1<<2 得到 0x4 0xf>>3 得到 0x2 (C语言中0x开头表示十六进制)可见左操作数是被操作的对象,右操作数是位移的...

C语言问题,在位运算中,操作数每右移一位,其结果相当于什么?若左移1位...
右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:inti=0x80000000;i=i>>1;\/\/i的值不会变成0x40000000,而会变成0xc0000000 2、左移,乘以2左移n位乘以2的n次方;先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符。

单片机8个灯右移的指令
用循环右移指令RR就可以达到 MOV A,#01H LOOP:MOV P0,A RR A SJMP LOOP END

c语言和汇编的程序八个LED依次左移逐个点亮,点亮后在依次右移逐个点亮不...
汇编语言 LEDEQU 30H ORG 0000H LJMP MAIN ORG 0030H MAIN:CLR EA MOV SP,#5FH MOV LED,#0FEH MOV R0,#7 LOOP:MOV R7,#50 LCALL DELAY MOV A,LED RL A MOV LED,A MOV P3,A DJNZ R0,LOOP MOV R0,#7 LOOP1:MOV R7,#50 LCALL DELAY MOV A,LED RR A MOV LED,A MOV P3,A ...

很简的51单片机C语言流水灯程序
1、51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程:include<reg51.h> \/\/51单片机头文件#include <intrins.h> \/\/包含有左右循环移位子函数的库#define uint unsigned int \/\/宏定义#define uchar unsigned char \/\/宏定义sbit beep=P2^3;void delay(uint z) \/\/延时函数,z...

单片机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 ...

相似回答