C語言之有符號數和無符號數

來源:互聯網
上載者:User

標籤:負數   正數   無符號   

我們知道,在C語言中存在無符號數和有符號數(一些進階語言如Java裡面是沒有無符號數的),但是對於電腦而言,其本身並不區別有符號數和無符號數,因為在電腦裡面都是0或者1,但是在我們的實際使用中有時候需要使用有符號數來表示一個整數,因此我們規定,當最高位為1的時,表示為負數,最高位為0時,表示為正數。

1:有符號數和無符號數在數值上的區別。

有符號數的最高位用來表示符號,所以在最大的數值上,有符號數的最大值小於無符號數。以一個位元組為例:

有符號數的取值範圍為:-128 — 0 — 127

無符號數的取值範圍為:0 — 255


2:正數和負數的轉換

轉換關係為:負數(正數) = 正數(負數)的補碼 + 1;

例如:

5  = 0000 0101

-5 = 1111 1011

實際的計算:

最大值 - 當前值 +1;

0xFF -5 +1 = -5(1111 1011)

0xFF -(-5) +1 = 5(0000 0101)


3:正負數在電腦中的儲存

在電腦中,並不存在所謂正負,具體看下面的代碼

int main(void)
 {
        int x = -1;
         int i = 0;
      unsigned int ux = (unsigned)x;
        for(i = 0;i<32;i++)
         {
                 ux = ux >> i;
                if((ux & 0x01) == 0)
                         printf("%d = 1\r\n",i);
         }

    ux = (unsigned) x;

    printf("ux = %d \n",ux);

    printf("ux = %u \n",ux);

}

運行結果為:

111111111(32個1)

ux = -1

ux = 4294967295

原因是,當我們將 -1 通過強制類型轉換賦值給ux時,此時ux變數所對應的地址,所存放的值是-1,也就是0xFFFFFFFF,也就是說,從儲存的角度上講,-1和4294967295在電腦的儲存值都是0xFFFFFFFF,關鍵是你按怎樣的方式去解析,

ux = -1;此時我們是按%d也就是有符號整形的方式去解析這個儲存空間所對應的值,所以得到的解析結果是-1;

ux = 4294967295,此時我們是按%u也就是無符號整形的方式去解析這個儲存空間的值,所以得到的最高位就是數值位,而不是符號位。

解析過程如下,這裡假設int類型為一個位元組(4個位元組也是一樣的原理,只是數值更大而已)

                          255
                            -1
 位
   值
     位
    值
1
1
1
1
1
2
1
2
1
2
4
1
4
1
4
8
1
8
1
8
16
1
16
1
16
32
1
32
1
32
64
1
64
1
64
128
1
128
1
-128

所以

-1 = 1+2+4+8+16+32+64+(-128)

255 = 1+2+4+8+16+32+64+128

綜上所述,電腦中的儲存方式並不區分正負,關鍵在於程式員用什麼方式去解析這Block Storage空間(地址)的值。

本文出自 “11664570” 部落格,請務必保留此出處http://11674570.blog.51cto.com/11664570/1956201

C語言之有符號數和無符號數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.