• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-145  評(píng)論-173  文章-70  trackbacks-0

            關(guān)于補(bǔ)碼的一些認(rèn)識(shí):

            1.強(qiáng)制類型轉(zhuǎn)換不改變參數(shù)在計(jì)算機(jī)中的表示,位的表示沒(méi)有改變,改變的只是如何將這些位解釋成數(shù)據(jù)。。

            看看下面的代碼:

            unsigned int x ;

               int y = -2;

               x = y;

               print_binary(x);

               print_binary(y);

               unsigned char a;

               char b = -2;

               a = b;

               print_binary(a);

               print_binary(b);

               short int n = 12345;

               short int mx = -n;

               print_binary(n);

               print_binary(mx);

             

            逐個(gè)驗(yàn)證,都是成立的,注意對(duì)于最后一個(gè),不是強(qiáng)制類型轉(zhuǎn)換,而是取相反數(shù),這個(gè)當(dāng)然是要變的,補(bǔ)碼,取反加1.    OK

             

            2.先看看這個(gè)誤區(qū)。對(duì)于:

            int num = 0x12345678;

            char *pnum = (char *)&num;

            for (int j = 0; j < 4; j++ )

            {

                   printf("%.2x" ,pnum[j]);

            }

            for (int j = 0; j < 4; j++ )

            {

               cout << hex << pnum[j] << " ";

            }

             

            為何輸出的內(nèi)容是:

            78563412

            x V 4 

            請(qǐng)按任意鍵繼續(xù). . .

            X ----- “78”

            printf("%x",'x');

            輸出即為78.

            為何前者輸出的是正確的結(jié)果而后者不是呢?很簡(jiǎn)單,前者格式化輸出為2位的16進(jìn)制數(shù),而后者則認(rèn)為它是字符,因?yàn)槭?/span>char*類型。看了C++C的不同也在于此啊。(追問(wèn):那么C++中的表示呢?)該語(yǔ)句中,即使是hex,還是輸出來(lái)的是的是ASCII對(duì)應(yīng)的字符。。。(查查hex等的具體用法)

             

            3.小端法表示:

            //該函數(shù)模板實(shí)現(xiàn)了將某類型的變量各位輸出來(lái)看看。。

            template <typename T>

            void print_binary(T n)

            {

               for ( int i = sizeof(n)*8 - 1; i >= 0; i-- )

               {

                  cout <<(( n >> i ) & 1 ) << (i % 8 == 0 ? " " : "");

               }

               cout << endl;

            }

             

             

            for (int j = 0; j < 4; j++ )

               {

                  printf("%.2x",pnum[j]);

                  printf(" ");

               }

            print_binary(pnum[0]);

             

            輸出:

            78 56 34 12

            0111 1000

            請(qǐng)按任意鍵繼續(xù). . .

            上面這個(gè)代碼就是將第一個(gè)類型的單元輸出來(lái)看看。注意,我這里用到的這個(gè)模板函數(shù)很好,通過(guò)它我可以知道任何類型的變量。顯然pnum[0]是一個(gè)char類型的。而看看里面的部分,哈哈,剛好就是78對(duì)應(yīng)的二進(jìn)制表示了。。。所以說(shuō):計(jì)算機(jī)可以尋址的最小單位是一個(gè)字節(jié)。而這個(gè)字節(jié)的內(nèi)部,它是無(wú)法得到的,更是無(wú)法改變的,intel機(jī)都是用的小端法表示的,所以地位的78顯示在前面,但是表示78的內(nèi)部的二進(jìn)制位,卻沒(méi)有按照這個(gè)來(lái),注意,前面所說(shuō)的。。

             

            4.關(guān)于unsignedsigned的幾點(diǎn)說(shuō)明:

            前面說(shuō)過(guò),表示是不變的。可是如果格式化輸出的時(shí)候要注意形式。

            先看看下面的代碼:

            #include <iostream>

            using namespace std;

             

            int main()

            {

               int x = -8;

               unsigned int y = x;

               printf("%d\n",x);

               printf("%d\n",y);

               printf("%u\n",x);

               printf("%u\n",y);

               int a = -12;

               int b = 8;

               printf("%d\n",a+b);

               printf("%d\n",(unsigned)a+b);

               printf("%u\n",(unsigned)a+b);

               printf("%u\n",a+b);

               int c = -1;

               printf("%d\n",c);

               printf("%u\n",c);

               printf("%u\n",(unsigned)c);

               return 0;

            }

             

            -8

            -8

            4294967288

            4294967288

            -4

            -4

            4294967292

            4294967292

            -1

            4294967295

            4294967295

            請(qǐng)按任意鍵繼續(xù). . .

            %d %u表示不同的輸出格式,前者是有符號(hào)的,后者是無(wú)符號(hào)的。如果類型不一致,那么會(huì)按照這個(gè)格式來(lái)轉(zhuǎn)換的,比如一個(gè)unsigned的類型,那么用%d就會(huì)自動(dòng)轉(zhuǎn)換成有符號(hào)的。。特別注意。

            //用這個(gè)函數(shù)模板來(lái)實(shí)現(xiàn)輸出各位。。。

            template <class T>

            void print_binary(T a)

            {

               for ( int i = sizeof(T) * 8 - 1; i >= 0; i-- )

               {

                  cout << (( a >> i ) & 1) << (i % 8 == 0 ? " " : "");

               }

               cout << endl;

            }

             

            posted on 2009-10-07 20:41 deercoder 閱讀(412) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 深入理解計(jì)算機(jī)系統(tǒng)
            四虎国产精品免费久久5151| 久久97久久97精品免视看| 久久国产免费| 日韩影院久久| 久久99精品久久久久子伦| 亚洲午夜久久影院| 国内精品久久久久久久久电影网| 青青草国产精品久久久久| 午夜精品久久久久久影视777| 久久天天躁狠狠躁夜夜2020一| 国产成人精品三上悠亚久久| 无码人妻精品一区二区三区久久久 | 久久精品国产99久久久古代| 奇米影视7777久久精品人人爽| 99久久无色码中文字幕人妻| 久久99精品久久久久久动态图| 国产精品va久久久久久久| 亚洲欧洲精品成人久久曰影片| 亚洲精品无码久久千人斩| 国产2021久久精品| 日韩人妻无码一区二区三区久久99| 99久久精品国内| 久久久久久久免费视频| 久久国产精品成人免费 | 亚洲伊人久久大香线蕉苏妲己| 久久人人爽人人爽人人片AV高清 | 97精品伊人久久久大香线蕉| 久久久久亚洲爆乳少妇无| 91精品国产高清久久久久久io| 欧美日韩久久中文字幕| 国产精品亚洲美女久久久| 久久精品国产精品亚洲毛片| 亚洲另类欧美综合久久图片区| 99热精品久久只有精品| 97精品伊人久久大香线蕉app| 亚洲伊人久久精品影院| 亚洲欧美日韩精品久久亚洲区 | 成人国内精品久久久久影院VR| 久久久一本精品99久久精品88| 久久综合亚洲色HEZYO社区| 久久亚洲国产成人精品无码区|