C語言day06-05位運算02-左移右移

pragma mark 位運算02-左移右移

pragma mark 概念

/**
 *  
    左移 <<
    右移 >>
 應(yīng)用場景:如果想讓某一個數(shù)乘以2的多少次冪,或者除以2的多少次冪,最高效的運算方式就是左移右移

 */

pragma mark 代碼

#include <stdio.h>
int main()
{
#pragma mark 左移
    /**
     左移 : <<
     9 << 1 ?
     9 << 2 ?
     規(guī)律: 左移就是用左移動的數(shù)乘以2的移動次冪
     例如:
     9 << 1 == 9 * 2(1) == 18
     9 << 2 == 9 * 2(2) == 36
     
     注意點:
     由于左移運算,被移動的數(shù)的最高位會被拋棄(移除),所以左移有可能會改變一個數(shù)的正負性
     
     0000 0000 0000 0000 0000 0000 0000 1001    // 用于對比
     000 0000 0000 0000 0000 0000 0000 10010    // 16 + 2 = 18
     
     0000 0000 0000 0000 0000 0000 0000 1001    // 用于對比
     00 0000 0000 0000 0000 0000 0000 100100    // 32 + 4 = 36

     */
    
    printf("%i\n",9<<2);
    
#pragma mark 右移
    /**
     右移: >>
     9 >> 1 = ?
     9 >> 2 = ?
     規(guī)律: 右移就是右移動的數(shù) 除以 2的移動次冪
     9 >> 1 == 9/ 2(1) == 4
     9 >> 2 == 9/ 2(2) == 2
     
     0000 0000 0000 0000 0000 0000 0000 1001    // 用于對比
     0 0000 0000 0000 0000 0000 0000 0000 100   // 4
     
     0000 0000 0000 0000 0000 0000 0000 1001    // 用于對比
     0 00000 0000 0000 0000 0000 0000 0000 10   // 2

     -9 >> 1
     1000 0000 0000 0000 0000 0000 0000 1001    // 用于對比
     1000 0000 0000 0000 0000 0000 0000 1001   // 原碼
     1111 1111 1111 1111 1111 1111 1111 0110   // 反碼
     1111 1111 1111 1111 1111 1111 1111 0111   // 補碼 最高位的第二位 補1 砍掉最后一位
     11111 1111 1111 1111 1111 1111 1111 011   // 右移一位
     00000 0000 0000 0000 0000 0000 0000 001   // -1
     ----------------------------------------
     11111 1111 1111 1111 1111 1111 1111 010   // 反碼
     10000 0000 0000 0000 0000 0000 0000 101   // 原碼 1 + 4 = 5 最高位是 1 所以為-5
     
     注意:負數(shù)的左移右移是補碼在移動,因為負數(shù)都是以補碼的形式存儲在內(nèi)存中的

     應(yīng)用場景:如果想讓某一個數(shù)乘以2的多少次冪,或者除以2的多少次冪,最高效的運算方式就是左移右移
     */

    printf("%i\n",-9 >> 1);
    return 0;
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 位運算 位運算的運算分量只能是整型或字符型數(shù)據(jù),位運算把運算對象看作是由二進位組成的位串信息,按位完成指定的運算,...
    IIronMan閱讀 8,090評論 0 2
  • 左移 左移,就是把一個數(shù)的所有位都向左移動若干位,<<運算符表示比如 所以說左移1位相當(dāng)于乘以2,那么左移n位就是...
    edison0428閱讀 1,231評論 0 0
  • 位運算是指按二進制進行的運算。在系統(tǒng)軟件中,常常需要處理二進制位的問題。C語言提供了6個位操作運算符。這些運算符只...
    朱森閱讀 823評論 0 1
  • 他們是青梅竹馬 把對方當(dāng)成最親密的人 可惜他是京城赫赫有名的大少爺 她卻只是被他小的時候買回來卑微的奴人。 她明明...
    Vencir閱讀 354評論 0 5
  • “拜水都江堰,問道青城山”,來到成都,怎能不去青城山? 青城山是中國道教發(fā)源地之一,據(jù)歷史記載,東漢順帝漢安二年,...
    脫俗兒閱讀 997評論 17 8

友情鏈接更多精彩內(nèi)容