邏輯右移函數 srl()與算術右移函數 sra() (轉)


 

比如一個有符號位的8位二進制數11001101,邏輯右移就不管符號位,如果移一位就變成01100110。算術右移要管符號位,右移一位變成10100110。

邏輯左移=算數左移,右邊統一添0

邏輯右移,左邊統一添0

算數右移,左邊添加的數和符號有關

附上代碼:

int sra(int x, int k)
{
    int xsrl = (unsigned) x >> k;
    int w = sizeof(int) << 3;
    return xsrl |= (-1 << (w-k));
} 
unsigned srl(unsigned x, int k)
{
    unsigned xsra = (int) x >> k;
    int w = sizeof(int) << 3;
    return xsra &= ~(-1 << (w - k));
}

 

 

e.g:1010101010,其中[]位是添加的數字

邏輯左移一位:010101010[0]

算數左移一位:010101010[0]

邏輯右移一位:[0]101010101

算數右移一位:[1]101010101

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM