老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

C之位運算(十五)-創新互聯

   我們在嵌入式的開發中難免會遇到 C 語言中的位運算符,因為我們需要效率,而位運算恰好效率比別的運算符效率高多了。位運算符直接對 bit 為進行操作,其效率最高。常見的位運算操作如下

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:空間域名、網絡空間、營銷軟件、網站建設、滄縣網站維護、網站推廣。

C之位運算(十五)

        我們在左移和右移時必須要注意:1、左操作數必須為整數類型,char 和 short 被隱式轉換為 int 后進行移位操作;2、右操作數的范圍必須為:[0,31];3、左移運算符 << 將運算數的二進制位左移,規則是高位丟棄低位補0;4、右移運算符 >> 把運算數的二進制位右移,規則是高位補符號位低位丟棄。

        比如 0x1 << 2 + 3 的值會是多少呢?我們猜想有這么幾種情況:1、先算 0x1 << 2 再把中間結果加 3,最終結果為 7;2、先算 2 + 3,所以結果為 32;3、這么混合的運算會出錯。我們來看個示例代碼,來看看編譯器是如何處理的,代碼如下:

#include 

int main()
{
    printf("%d\n", 3 << 2); 
    printf("%d\n", 3 >> 1); 
    printf("%d\n", -1 >> 1); 
    printf("%d\n", 0x01 << 2 + 3);
    
    return 0;
}

        我們先來分析下這個代碼,第5行 3 << 2 ==> 11 << 2 ==> 1100 ==> 12;第6行 3 >> 1 ==> 11 >> 1 ==> 1;編譯后結果如下:

C之位運算(十五)

        我們可以看到我們的分析是對的,第8行執行的是我們之前分析的第2種結果。

        我們在 C 語言中應避免位運算符、邏輯運算符和數學運算符同時出現在一個表達式中;但位運算符、邏輯運算符和數學運算符需要同時參與運算時,盡量使用括號()來表達計算次序;左移 n 為相當于乘以 2 的 n 次方(同理右移相當于除),但效率比數學運算符高。

        我們下來看個實現宏函數交換的功能,這也是筆試中經常會遇到的一個題目,代碼如下:

#define SWAP1(a, b)    \
{                      \
    int t = a;         \
    a = b;             \
    b = t;             \
}

        這是我們最常用的一種寫法,但是它需要一個額外變量。我們下面來看個不需要借助額外變量的版本就可以完成的宏函數,代碼如下:

#define SWAP2(a, b)    \
{                      \
    a = a + b;         \
    b = a - b;         \
    a = a - b;         \
}

        第4 行相當于 b = (a + b) - b ==> b = a;第5行相當于 a = (a + b) - b ==> a = (a + b) - a ==> a = b;這種也可以完成交換功能,但是它的效率似乎不是那么的高,因為要借助于數學運算。我們再來實現一個基于位運算實現的,代碼如下:

#define SWAP3(a, b)    \
{                      \
    a = a ^ b;         \
    b = a ^ b;         \
    a = a ^ b;         \
}

        我們上面的代碼效率是非常高的,我們來分析下,第 4 行相當于 b = (a ^ b) ^ b ==> b = a; 第5行相當于 a = (a ^ b) ^ b ==> a = (a ^ b) ^ a ==> a = b;這樣也實現了交換的功能。

        位運算與邏輯運算不同之處:1、位運算沒有短路規則,每個操作數都參與運算;2、位運算的結果為整數,而不是 0 或 1;3、位運算的優先級高于邏輯運算優先級。

        我們來看看下面這個示例代碼:

#include 

int main()
{
    int i = 0;
    int j = 0;
    int k = 0;
    
    if( ++i | ++j & ++k )
    {
        printf("Run here...\n");
    }
    
    printf("i = %d\n", i);
    printf("j = %d\n", j);
    printf("k = %d\n", k);
    
    return 0;
}

        我們分析下,第 9 行執行完,i、j、k分別就是1了。因為我們這塊是位運算,所以沒有短路規則。我們來看看編譯結果:

C之位運算(十五)

        是如我們分析的那樣,如果我們第9行換成if( ++i || ++j && ++k ) 這樣,那么便是 i = 1,j = 0, k = 0 了,打印如下

C之位運算(十五)


        通過我們今天學習的位運算符,總結如下:1、位運算符只能用于整數類型;2、左移和右移運算符的右操作數范圍必須為[0, 31];3、位運算沒有短路規則,所有操作數均會求值;4、位運算的效率高于四則運算和邏輯運算;5、運算優先級:四則運算 > 位運算 > 邏輯運算。后面我們會繼續對 C 語言的學習。

         歡迎大家一起來學習 C 語言,可以加我QQ:243343083。

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


本文標題:C之位運算(十五)-創新互聯
分享路徑:http://www.xueling.net.cn/article/ddgdjd.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 一a一片一级一片按摩师 | 国产口爆吞精在线视频观看 | freesexvideos性少妇kant | 香蕉欧美成人精品A∨在线观看 | 风流老太婆大BBWBBWHD视频 | 2022国产成人精品视频人 | 视频一区二区中文字幕 | 久久网中文字幕 | 特一级黄色片 | 丝袜亚洲另类欧美变态 | 7788色淫网站免费 | 国产一级义婬片AAA毛片久久 | 亚洲国产欧美91 | 国产亲子乱弄免费视频 | 久久免费视频一区二区 | 欧美成人一二三 | 67194熟妇在线永久免费观看 | 中文字幕制服亚洲另类 | 永久免费无代码开发平台网站 | 91视频盛宴 | 九九精视频 | 中国性猛交xxxx乱大交3 | wwww.黄 | 精品一区二区久久久久 | 欧美性吧| 麻豆乱码国产一区二区三区的优势 | 免费A级毛片中文字幕 | 熟妇女的欲乱在线观看 | 久久国产精彩视频 | 亚洲欧洲精品一区二区三区四区 | 益日韩欧群交P片内射中文 最好看的中文视频最好的中文 | 操人视频 | 色婷婷av一区二区三区久久 | 老司机狠狠干 | 福利影院在线播放 | 天天操天天看 | 床震吃胸膜奶视频456 | 四虎国产精品永久入口 | 国产在线观看精品一区二区三区 | 精品少妇无码一区视频 | 国产麻豆va精品视频 |