<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 303  文章 - 883  trackbacks - 0
    <2008年2月>
    272829303112
    3456789
    10111213141516
    17181920212223
    2425262728291
    2345678

    歡迎光臨! 
    閑聊 QQ:1074961813

    隨筆分類(357)

    我管理的群

    公共blog

    • n維空間
    • Email : java3d@126.com 群 : 12999758

    參與管理的論壇

    好友的blog

    我的其他blog

    朋友的網站

    搜索

    •  

    最新評論

             在我們的教科書中和平時寫的小型應用程序中,很少能見到“<<”移位運算符,個人覺得原因有幾個,第一、我們的程序中時常使用的是十進制數據,如“10”、“0.5”,很少會用到十六進制的數。其次,大部分的初級程序員腦子里沒有二進制、八進制、十六進制的影子,一方面由于學校教育的缺陷所致、一方面是,生活中所見大多十進制的數據。
     
           為什么要用到非十進制的數制?
    答:因為字節是內存的基本數據單位。八進制在計算機系統里不著重要且奇特的作用,或者說所有和二的N次方(2、4、8、16 ... ... 256、512、1024)的數都和計算機有著莫大的聯系。

            什么地方,我們會時常見到這些數據?
    答:具個人所見,在表示內存地址、寄存器地址、端口地址,及對一些寄存器進行附值操作時,會時常用到。

            如何對非十進制數據進行操作?
     答:在C里有不少的運算符提供了這些功能。比如:~位取反,& 位邏輯與 ,| 位邏輯或,^ 位邏輯異或,>> 右移,<< 左移 。用這些操作符,可以以二進制的方式操作數據。

            為什么要學這些?
    答:這個問題很有意思、也是我們在學習之前必須弄清楚的,如果不知道有什么用,那學完很快就會忘記,且學起來毫無熱情可言。廢話多了,當你打算拿C做一些底層操作,或者你打算在不久的將來或你現在就打算征服Linux內核,那就很有必要學學了,學得好是幫助,學得不好是瓶頸,有點言重了,呵呵??!

    在眾多的位操作符中,偶最常見的就是"<<"這個啦!所以這些只打算說說它,如果你對其他的感興趣,可自行早資料看看。

    首先、你有必要確定你的機器上裝了VC6或VC2005,我這里裝了2005
    然后、復制下面這個程序,到你機器上運行下
    #include <iostream> 
    using 
    namespace std;

    int main(){
            
    int a = 1;
        cout
    <<a<<endl;
        a 
    = a<<10;
        cout
    <<a<<endl;

        
    return 0;
    }
    打印出來的是 > 1024
    為什么是1024?
    看到沒?上面的代碼,中間有一句是怎么寫的 > a = a<<10;
    對,就是它了,左移位運算符號,這句話做的事情是:
    先將a里的1轉化為二進制的1,然后將他左移10位,每移一位補一個0上去,運行這句之后a在機器里的二進制就成了 10000000000  化為十進制 1*210=1024

    哈哈,是不是有點暈,沒事,再運行下,下面的程序就完全了解了
    #include <iostream> 
    using 
    namespace std;

    int main(){
        
    int a = 1;
        cout
    <<a<<endl;
        a 
    = a<<10;//1*1024
        cout
    <<a<<endl;
        a 
    = 1;
        a 
    = a<<8;//1*256
        cout
    <<a<<endl;
        a 
    = 2;
        a 
    = a<<9;//2*512
        cout
    <<a<<endl;

        
    return 0;
    }

    總結一下,這里a<<n 可以看成 a * 2n 這下了解吧^_^

    接下來再介紹下如何在頭文件里使用<<吧!在頭文件里定義的是宏,所以,一旦定義錯誤,編譯的時候并不會提示出錯,而運行就找了麻煩了,所以一定要小心哦!下面給個簡單的例子吧!

    i.h
    #define A(var) (var<<10)
    main.c
    #include <iostream> 
    using namespace std;

    #include
    "i.h"

    int main()
    {
        cout
    <<A(1)<<endl;

        
    return 0;
    }

    上面,不過是些極其簡單的內容,如果想正真了解,請多看一些低層代碼并多多實踐吧!


    地震讓大伙知道:居安思危,才是生存之道。
    posted on 2008-02-09 20:37 小尋 閱讀(583) 評論(1)  編輯  收藏 所屬分類: c/c++/C#/pasic/vb/php/asp(.net)/win-cgi/xml...

    FeedBack:
    # re: C中的 "<<" 位運算符 2009-02-04 13:39 militala
    真不錯, 謝謝, 喜歡...沒有多少人講這么細, 呵呵....
    收了.  回復  更多評論
      
    主站蜘蛛池模板: 久久精品国产亚洲av麻豆图片| 嫩草成人永久免费观看| 国产免费女女脚奴视频网| 色婷婷亚洲十月十月色天| 日韩精品在线免费观看| 亚洲AV无码一区二区乱孑伦AS| A毛片毛片看免费| 久久乐国产精品亚洲综合| 人人爽人人爽人人片av免费 | 国产精品69白浆在线观看免费| 久久亚洲精品成人无码网站 | 免费国产高清视频| 黄色a三级免费看| 亚洲中久无码不卡永久在线观看| 中文字幕高清免费不卡视频| 久久久久久久综合日本亚洲| 99re视频精品全部免费| 亚洲av产在线精品亚洲第一站| 青青草国产免费久久久下载| 欧洲乱码伦视频免费国产| 亚洲精品~无码抽插| 国产成人精品一区二区三区免费| 亚洲成aⅴ人在线观看| 欧洲精品成人免费视频在线观看| 久久精品国产亚洲av瑜伽| 超清首页国产亚洲丝袜| 日本人成在线视频免费播放| 亚洲一区二区三区高清不卡| 国产成人在线免费观看| 久久久久久免费一区二区三区| 亚洲国产精品网站久久| 免费A级毛片在线播放不收费| 一个人看的www免费视频在线观看| 亚洲国产高清美女在线观看| 亚洲福利精品电影在线观看| 免费91麻豆精品国产自产在线观看 | 久久亚洲国产精品123区| 2019中文字幕在线电影免费| 精品国产亚洲一区二区三区在线观看| 国产aⅴ无码专区亚洲av| 国产在线国偷精品产拍免费|