㈠ 請問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等,多樣化數據採集與控制系統能夠讓單片機完成各項復雜的運算,無論是對運算符號進行控制,還是對系統下達運算指令都能通過單片機完成。