• <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  評論-173  文章-70  trackbacks-0

            關于補碼的一些認識:

            1.強制類型轉換不改變參數在計算機中的表示,位的表示沒有改變,改變的只是如何將這些位解釋成數據。。

            看看下面的代碼:

            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);

             

            逐個驗證,都是成立的,注意對于最后一個,不是強制類型轉換,而是取相反數,這個當然是要變的,補碼,取反加1.    OK

             

            2.先看看這個誤區。對于:

            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] << " ";

            }

             

            為何輸出的內容是:

            78563412

            x V 4 

            請按任意鍵繼續. . .

            X ----- “78”

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

            輸出即為78.

            為何前者輸出的是正確的結果而后者不是呢?很簡單,前者格式化輸出為2位的16進制數,而后者則認為它是字符,因為是char*類型??戳?/span>C++C的不同也在于此啊。(追問:那么C++中的表示呢?)該語句中,即使是hex,還是輸出來的是的是ASCII對應的字符。。。(查查hex等的具體用法)

             

            3.小端法表示:

            //該函數模板實現了將某類型的變量各位輸出來看看。。

            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

            請按任意鍵繼續. . .

            上面這個代碼就是將第一個類型的單元輸出來看看。注意,我這里用到的這個模板函數很好,通過它我可以知道任何類型的變量。顯然pnum[0]是一個char類型的。而看看里面的部分,哈哈,剛好就是78對應的二進制表示了。。。所以說:計算機可以尋址的最小單位是一個字節。而這個字節的內部,它是無法得到的,更是無法改變的,intel機都是用的小端法表示的,所以地位的78顯示在前面,但是表示78的內部的二進制位,卻沒有按照這個來,注意,前面所說的。。

             

            4.關于unsignedsigned的幾點說明:

            前面說過,表示是不變的。可是如果格式化輸出的時候要注意形式。

            先看看下面的代碼:

            #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

            請按任意鍵繼續. . .

            %d %u表示不同的輸出格式,前者是有符號的,后者是無符號的。如果類型不一致,那么會按照這個格式來轉換的,比如一個unsigned的類型,那么用%d就會自動轉換成有符號的。。特別注意。

            //用這個函數模板來實現輸出各位。。。

            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 閱讀(416) 評論(0)  編輯 收藏 引用 所屬分類: 深入理解計算機系統
            亚洲精品视频久久久| 国产精品一久久香蕉国产线看| 久久精品国产色蜜蜜麻豆| 久久精品国产99久久久香蕉| 九九精品久久久久久噜噜| 久久精品人人做人人爽97| 久久久久国产视频电影| 欧美国产成人久久精品| 夜夜亚洲天天久久| 亚洲熟妇无码另类久久久| 精品国产婷婷久久久| 一本色综合网久久| 久久99久久无码毛片一区二区 | 91精品国产综合久久香蕉 | 国产精品久久久久免费a∨| 久久精品国产亚洲欧美| 久久夜色精品国产噜噜麻豆 | 久久精品国产亚洲AV电影| 热久久国产欧美一区二区精品| 韩国三级大全久久网站| 色8久久人人97超碰香蕉987| 亚州日韩精品专区久久久| 国产成人久久777777| 69久久夜色精品国产69| 欧美牲交A欧牲交aⅴ久久| 久久99热这里只有精品国产| 欧美精品福利视频一区二区三区久久久精品 | 免费精品99久久国产综合精品| 无码人妻精品一区二区三区久久 | 国产精品gz久久久| 国产成人久久激情91| 99久久精品日本一区二区免费| 老色鬼久久亚洲AV综合| 亚洲国产精品成人久久| 久久香蕉国产线看观看精品yw| 久久综合给合久久狠狠狠97色 | 国产精品嫩草影院久久| 亚洲精品高清久久| 久久婷婷五月综合97色直播| 色综合久久天天综线观看| 蜜桃麻豆WWW久久囤产精品|