單片機C語言實現循環移位!

2020-12-16 電子產品世界

大家知道,大家用MCU寫程序的時候,只有移位的語句,沒有循環移位的語句。那麼如何實現循環移位呢,詳見下述:


本文引用地址:http://www.eepw.com.cn/article/201611/319872.htm

循環移位區別於一般移位的是移位時沒有數位的丟失。循環左移時,用從左邊移出的位填充字的右端,而循環右移時,用從右邊移出的位填充字的左側。這種情況在系統程序中時有使用,在一些控制程序中用得也不少。  設有數據說明:


a=01111011,循環左移2位 正確結果: 11101101


過程:


b=a>>(8-2) 用來得到正常左移丟失的位和循環移位後其正確位置 b=00000001;


a=a<<2;左移 a=11101100


a=a|b; a=11101101


如果不是用中間變量 a=(a>>(8-2))|(a<<2)


總長度N(8 16 32)


循環左移n: (a>>(N-n))|(a>>n)


循環右移n: (a<>n)


C語言的位運算功能是其區別於其他大多數高級程序設計語言的特色之一,用它可以方便實現一些特殊功能,靈活掌握是用C程序編寫系統程序的基礎。


相關焦點

  • 單片機c語言教程:C51循環語句
    循環語句是幾乎每個程序都會用到的,它的作用就是用來實現需要反覆進行多次的操 作。如一個 12M 的 51 晶片應用電路中要求實現 1 毫秒的延時,那麼就要執行 1000 次空語句 才能達到延時的目的(當然能使用定時器來做,這裡就不討論),如果是寫 1000 條空語 句那是多麼麻煩的事情,再者就是要佔用很多的存儲空間。
  • 寫出高效優美的單片機C語言代碼
    (2)、平方運算a=pow(a,2.0);可以改為:a=a*a;說明:在有內置硬體乘法器的單片機中(如51系列),乘法運算比求平方運算快得多,因為浮點數的求平方是通過調用子程序來實現的,在自帶硬體乘法器的AVR單片機中,如ATMega163中,乘法運算只需2個時鐘周期就可以完成。
  • 結合單片機學習板學習c語言之流水燈製作--intrins.h頭文件
    目的:實現流水燈。SCON=0XF8;  PCON=0X80;  EA=1;  ES=1;  RI=0;  b=0xfe;  while(1)  {  P1=b;  b=_crol_(b,1);//字符中的位左移1位(偽本徵函數)  for(c=0;c<30000;c++)
  • 單片機C語言程序設計:單只數碼管循環顯示 0~9
    /* 名稱:單只數碼管循環顯示 0~9說明:主程序中的循環語句反覆將 0~9 的段碼送至 P0 口,使數字 0~9 循環顯示 51單片機相關文章
  • 單片機c語言中的左移右移
    例如:a = 0x8f; // 10001111a << 2; // 左端移出的值丟棄,右端補0結果:a = 0x3c (00111100)本文引用地址:http://www.eepw.com.cn/article/201611/321270.htm在keil c51
  • 如何寫出高效優美的單片機C語言代碼?
    (2)、平方運算a=pow(a,2.0);可以改為:a=a*a;說明:在有內置硬體乘法器的單片機中(如51系列),乘法運算比求平方運算快得多,因為浮點數的求平方是通過調用子程序來實現的,在自帶硬體乘法器 的AVR單片機中,如ATMega163中,乘法運算只需2個時鐘周期就可以完成
  • 單片機C語言實現求平方根算法
    C語言中要求平方根,可以在頭文件中加入#include <math.h>.然後調用sqrt(n);函數即可。但在單片機中調用此函數無疑會耗費大量資源和時間,是極不合適的。在此,總結下網上常見的四種單片機常用開方根算法:對於擁有專門的乘除法指令的單片機,可採用以下兩種方法:1、二分法對於一個非負數n,它的平方根不會小於大於(n/2+1)(謝謝@linzhi-cs提醒)。在[0, n/2+1]這個範圍內可以進行二分搜索,求出n的平方根。
  • 為什麼C語言是最適合單片機編程的高級語言!
    為什麼還在用C語言編程?答案是:C語言是最適合單片機編程的高級語言。 這個問題的意思應該是:現在有很多很好用的高級語言,如java,python等等,為什麼這些語言不能用來編寫單片機程序呢?那麼這個問題的答案就是:不是不能,而是不合適。
  • 最適合單片機編程的高級語言,除了C語言,別無選擇!
    單片機為什麼還在用C語言編程?答案是:C語言是最適合單片機編程的高級語言。 這個問題的意思應該是:現在有很多很好用的高級語言,如java,python,VC等等,為什麼這些語言不能用來編寫單片機程序呢?那麼這個問題的答案就是:不能不能,而是不合適。
  • PIC單片機C語言程序設計(4)
    2.if語句  if 語句也稱為條件語句,是C 語言中轉移語句之一。在設計C 語言程序時,常常要根據某些條件以決定程序運行的流向,這時就需要if 語句來實現。
  • 單片機C語言延時需注意的問題
    標準的C語言中沒有空語句。但在單片機的C語言編程中,經常需要用幾個空指令產生短延時的效果。這在彙編語言中很容易實現,寫幾個nop就行了。對於延時比較長的,要求在大於10us,採用C51中的循環語句來實現。  在選擇C51中循環語句時,要注意以下幾個問題  第一、定義的C51中循環變量,儘量採用無符號字符型變量。  第二、在FOR循環語句中,儘量採用變量減減來做循環。  第三、在do…while,while語句中,循環體內變量也採用減減方法。
  • PIC單片機asm與C混合編程
    C 和彙編混合編程有兩個原因決定了用C 語言進行單片機應用程式開發時使用彙編語句的必要性:單片機的一些特殊指令操作在標準的C 語言語法中沒有直接對應的描述,例如PIC 單片機的清看門狗指令「clrwdt」和休眠指令「sleep」;單片機系統強調的是控制的實時性,為了實現這一要求,有時必須用彙編指令實現部分代碼以提高程序運行的效率。
  • PIC單片機C語言程序設計(5)
    在《電子製作》2009年第10期,《PIC單片機C語言程序(1)》的延時函數中,我們已用過後綴運算符i++,大家可以從中體會其用法。  (2)邏輯運算符。  邏輯運算符是基本運算符中的一種。邏輯運算符有:與「&&」、或「||" 、非「!」等3三種。  邏輯運算符&&、||為雙目(兩個量)運算符,!為單目運算符。
  • 基於C語言STC89C52單片機電子密碼鎖的設計與仿真
    它採用高可靠性的STC89C52單片機來實現開鎖和密碼的識別,採用具備I2C總線接口的E2PROM晶片來完成密碼的存儲,通過1602液晶顯示器提示程序運行狀態和使用步驟,利用蜂鳴器模擬報警,發光二極體模擬鎖的開關。該系統用C語言編寫程序,與彙編語言相比具備更好的移植性和可讀性,便於修改和增減功能。
  • 基於C語言51單片機電子密碼鎖的設計與仿真
    電子密碼鎖通常使用ARM和單片機控制,單片機相對ARM實現較為簡單,功能較為完善,因此使用單片機控制較多。用單片機控制的窖碼鎖常使用彙編語言編寫程序,顯示器多數用。而本文所介紹的電子密獁鎖使用移植性及可讀性強的高級語言C語言編寫,便於修改和增減功能蚤同時採用顯示清楚數碼管,功率消耗小而且壽命長的 液晶顯示器,顯示更加直觀,使用更加方便。
  • 【愛找茬】都是C語言,單片機C語言和普通的C語言究竟有什麼差異呢?
    許多小夥伴在學完C語言後想入門單片機,但學著學著發現明明都是C語言,為什麼單片機C語言和我當初學的C語言有差異呢?今天小編就來梳理我們平時所學的C語言與單片機C語言的有什麼樣的不同。
  • 嵌入式C語言裡的土豪們之除法與移位
    在這裡簡單給大家分析一下嵌入式C語言編程時用到的除法與移位。本文引用地址:http://www.eepw.com.cn/article/182359.htm  除法土豪  除法在嵌入式微處理器裡可算是一個消耗大戶,複雜的實現方式不僅佔用了大師寶貴的計算時間而且精度有限情況下佔用了大片的RAM。
  • 單片機C語言求平方根函數
    在單片機中要開平方.可以用到下面算法: 算法1: 本算法只採用移位、加減法、判斷和循環實現,因為它不需要浮點運算,也不需要乘除運算,因此可以很方便地運用到各種晶片上去。
  • PIC單片機C語言程序設計(2)
    一個完整的PIC單片機C語言程序,通常由包含文件(即頭文件1,變量定義、變量說明、函數定義、函數體和注釋等六部分等組成。  1.C語言的標識符  所謂標識符,實際上是一些由程序編寫者自定義的名稱,類似於PIC單片機彙編語言中給寄存器(RAM)的命名。
  • HMAC認證協議的ZQ032SA單片機實現
    我們利用伺服器建立了服務端的模擬用戶資料庫,單片機實現客戶端的加密算法,電話線作為傳輸介質,實現了HMAC協議在IP電話計費系統中的應用。   1 HMAC的算法原理   1.1 HMAC算法定義