<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      逍遙自在學C語言 | 位運算符>>的高級用法

      前言

      在上一篇文章中,我們介紹了<<運算符的高級用法,本篇文章,我們將介紹>> 運算符的一些高級用法。

      一、人物簡介

      • 第一位閃亮登場,有請今后會一直教我們C語言的老師 —— 自在。

      • 第二位上場的是和我們一起學習的小白程序猿 —— 逍遙。

      二、優化除法運算

      • 除法運算需要比位移運算需要更多的計算資源,某些情況下采用位移運算可以提高性能

      • 代碼示例

      #include <stdio.h>
      int main()
      {
          int a = 1024;
          int b = a / 8; // 整除8
          int c = a >> 3; // 相當于除以8
          printf("b = %d, c = %d\n", b, c);
          return 0;
      }
      
      • 每右移一位相當于除以2, a >> 3相當于a/(2*2*2) = a/8;
      • 運行結果

      三、獲取字節序

      • 大端模式:是指數據的高字節保存在內存的低地址中,而數據的低字節保存在內存的高地址中。

      • 小端模式:是指數據的高字節保存在內存的高地址中,而數據的低字節保存在內存的低地址中。

      • 右移運算符還可以用于獲取當前系統的字節序(即大端序或小端序)

      • 比如數字 0x1234在內存中的表示形式為:

        大端模式:
        低地址 -----------------> 高地址
        0x12 | 0x34

        小端模式:
        低地址 ------------------> 高地址
        0x34 | 0x12

      • 代碼示例

      #include <stdio.h>
      int main()
      {
          short int i = 0x1234; // 假設i在內存中的地址為0x1000
          char *p = (char *)&i; // 將i的地址轉換為字符型指針,即指向0x1000的字節型指針
          if (*p == 0x12) // 判斷*p的值是否等于0x12,如果等于則為大端序,否則為小端序
          {
              printf("大端序\n");
          }
          else
          {
              printf("小端序\n");
          }
          return 0;
      }
      
      • 運行結果

      四、提取二進制數的某一位

      • 將一個二進制數右移n位,再與1進行按位與運算,得到的結果就是這個二進制數的第n位(從第0位開始算)
      • 例如,將1011右移2位,得到的結果是10,再與1進行按位與運算,得到的結果是0,即1011的第二位是0
      • 代碼示例
      #include <stdio.h>
      int main()
      {
          int a = 0b1011;
          int b = (a >> 2) & 1; // 提取a的第二位,即0
          printf("第二位的值為 %d\n", b);
          return 0;
      }
      
      • 運行結果

      五、提取二進制數的多個連續位

      • 將一個二進制數右移n位,再與一個掩碼進行按位與運算,得到的結果就是這個二進制數從第n位開始的若干位
      • 例如,將1011011右移3位,得到的結果是1011,再與111進行按位與運算,得到的結果是011,即1011011從第3位開始的三位是011
      • 代碼示例
      #include <stdio.h>
      int main()
      {
          int a = 0b1011011;
          int b = (a >> 3) & 0b111; // 提取a從第3位開始的3位,即101
          printf("b = %d\n", b);
          return 0;
      }
      
      • 運行結果,3 (二進制為0b011)

      六、浮點數向下舍入為整數

      • 這種用法通常用于嵌入式系統中,因為某些嵌入式處理器沒有浮點數運算單元,只能使用整數運算單元來處理浮點數
      • 將一個浮點數乘以一個定點數的精度,并將結果向下取整,可以得到一個整數近似值
      • 例如,將一個浮點數乘以1000,再將結果右移10位,得到的結果就是這個浮點數乘以1000并向下取整的整數值
      • 代碼示例
      #include <stdio.h>
      int main()
      {
          float x = 3.1415926;
          int a = (int)(x * 1000.0f) >> 10; // 將x乘以1000并向下取整
          printf("向下取整后的數值為 %d\n", a);
          return 0;
      }
      
      • 運行結果

      • 注意,此方法存在條件限制(小數要>0.024*個位數),一般不建議使用

      小結

      通過這篇文章,我們學會了用位運算符>>的5種高級用法

      1、優化除法運算

      2、獲取字節序

      3、提取二進制數的某一位

      4、提取二進制數的多個連續位

      5、浮點數向下舍入為整數

      ??歡迎各位 ??點贊 ?收藏 ??評論,如有錯誤請留言指正,非常感謝!

      posted @ 2023-04-16 23:28  知微之見  閱讀(632)  評論(4)    收藏  舉報
      主站蜘蛛池模板: 久久香蕉国产线看观看怡红院妓院 | 国产色视频一区二区三区qq号 | 中文字幕久久国产精品| 国产成年码AV片在线观看| 无码任你躁久久久久久老妇| 亚洲精品区二区三区蜜桃| 中文在线天堂中文在线天堂| 久久夜夜免费视频| A级毛片100部免费看| 国产成人精品亚洲精品密奴| 娇小萝被两个黑人用半米长| 亚洲中文字幕第二十三页| 国产91精品一区二区蜜臀| 亚洲成av一区二区三区| 国产精品高清一区二区三区不卡| 国产精成人品日日拍夜夜| 国产精品二区中文字幕| 奇米777四色影视在线看| 国产区精品视频自产自拍| 黄石市| 一区二区三区国产不卡| 性视频一区| 一个人在看www免费| 无码国产玉足脚交极品播放 | 精品国产乱码久久久人妻| 在线高清理伦片a| 亚洲人成网站在线播放2019| 日日碰狠狠躁久久躁综合小说| 国产av一区二区三区综合| 国产不卡一区二区在线| 国产中文字幕精品视频| av老司机亚洲精品天堂| 国产成人欧美一区二区三区在线 | 国产成人精品aa毛片| 午夜福利免费视频一区二区| 国产对白老熟女正在播放| 麻豆国产传媒精品视频| 精品蜜臀国产av一区二区| 香蕉亚洲欧洲在线一区| 日韩区二区三区中文字幕| 国产亚洲精品AA片在线爽|