勤&快

          問題其實就是你期望的東西和你體驗的東西之間的差別
          隨筆 - 55, 文章 - 0, 評論 - 68, 引用 - 0
          數(shù)據(jù)加載中……

          位運算補充:復習整數(shù)表示范圍

          位運算的示例代碼如下:
          #include <iostream>
          using namespace std;
          int main()
          {
           cout 
          << "lenght of int = " << sizeof(int<< endl; 
              
          int a = ~5;
              
          int b = ~(-6);
              cout 
          << "~5 = " << a << endl;
              cout 
          << "~(-6) = " << b << endl;
              
              
          int i = 0x7ffffffd;//整數(shù)的16進制表示方法,在數(shù)字前加0x,比如0x10表示的是16,0x0a表示的是10。8進制表示發(fā)是開始加0,如010表示8。
              cout << "i = 01111111 11111111 11111111 11111101 = " << i << endl;
              i 
          = i << 1;
              cout 
          << "i << 1 = " << i << endl;
              
              
          int t = 0x7fffffff;
              cout 
          << "t = 01111111 11111111 11111111 11111111 = " << t << endl;
              
          int k = t + 1;
              cout 
          << "k = t + 1" << endl;
              cout 
          << "k = 10000000 00000000 00000000 00000000 = " << t + 1 << endl;
              cout 
          << "k = t + 2" << endl;
              cout 
          << "k = 10000000 00000000 00000000 00000000 = " << t + 2 << endl;
                  
              getchar(); 
          }
          int型是4字節(jié),32位,因為有符號,所以表示范圍是[-2^31, 2^31-1]。即[-2147483648, 2147483647]。為什么負數(shù)會比整數(shù)多一個呢?
          32位太長,我們以4位的例子來說明。
          假設一個有符號整數(shù)有4位表示,比如0111表示7,原碼1111表示-7,但是-7的補碼是1001,0001表示1,原碼1001表示-1,但是-1的補碼是1111。
          那根據(jù)范圍公式,4位有符號數(shù)的范圍是[-8, 7]。
          7由0111表示,那么-8是哪個表示呢?經(jīng)實驗分析,發(fā)現(xiàn)-8的補碼表示為1000。為什么是這樣呢?我認為這就是一種規(guī)定,就像為什么1表示true,0表示false呢?都是規(guī)定,記住就好了。下面我根據(jù)我的理解,進行一下牽強的解釋。
          [-8, 7]為什么整數(shù)有7個,而負數(shù)有8個?4位的組合一共有2^4共16個,下面是4位編碼和表示的對照表,編碼使用補碼。
          0000    0
          0001    1
          0010    2
          0011    3
          0100    4
          0101    5
          0110    6
          0111    7
          1000    -8
          1001    -7
          1010    -6
          1011    -5
          1100    -4
          1101    -3
          1110    -2
          1111    -1

          由此可見,隨著二進制表示的補碼的不斷增加,所表示的數(shù)從0,增加到整數(shù)最大,接著到負數(shù)最小,然后到-1。32位的int型也是這樣的。當?shù)阶畲笳龜?shù)時,再加1,就會到最小負數(shù),也就是絕對著最大的負數(shù)。
          16個數(shù)中,7個整數(shù),1個零,另外7個是-1到-7。最后剩的-0,也就是1000,被定義為表示-8。

          posted on 2007-04-05 13:05 daning 閱讀(988) 評論(0)  編輯  收藏 所屬分類: others

          主站蜘蛛池模板: 交城县| 德清县| 富宁县| 汝阳县| 望都县| 柏乡县| 剑川县| 调兵山市| 怀化市| 咸宁市| 怀安县| 兴安县| 高州市| 阿拉尔市| 靖安县| 筠连县| 白玉县| 高碑店市| 五家渠市| 巴彦县| 石景山区| 铜山县| 黄平县| 万安县| 庆云县| 长兴县| 循化| 清新县| 黑山县| 古蔺县| 苏州市| 蓬溪县| 高平市| 乡城县| 东乌珠穆沁旗| 绩溪县| 郴州市| 红原县| 兴安盟| 手游| 阿拉善右旗|