<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • c語言中一個數字占幾個字節(C語言各種類型所占字節數)


    char和int類型都是有符號數類型,char類型的變量占據1個字節的容量,int類型的變量占據4個字節的容量。那么,把char類型變量賦給int類型變量,會有什么問題產生?

    我們會很直觀地認為,把1個字節大小的數據,放入4個字節大小的容量,沒有任何問題啊!我們做如下的一個測試例子:

    C語言的有符號數的符號位擴展,老司機都滑到

    程序運行結果如下:

    C語言的有符號數的符號位擴展,老司機都滑到

    可以看到b的結果也是-1,這是因為,把char類型變量賦值給放入int類型變量時,是把char類型變量的數據放入int類型變量的第字節,剩下的高位字節使用char類型變量的符號位擴展填充。所以,a變量的二進制是 1111 1111,其中符號位是1,那么,放入int類型變量的時候,把a變量的 1111 1111 數據放入int類型變量的低字節,高字節使用符號位1擴展填充,最終是1111 1111 1111 1111 1111 1111 1111 1111二進制數值,表示為-1這個數值。

    下面來講解一個應用實例,在網絡通信或者串口通信的過程中,傳輸的數據是一個一個字節的數據流。例如,一個字節的數據是128(十六進制是0x80),對應是二進制是1000 0000,那么,就應該把這個數據當作“無符號”數看待,這樣,一個字節中的8位數據才完全做為數值位,才表示128這個數值。

    如果把128這個數值作為“有符號”數看待,那么,最高位作為符號位,剩下的7位作為數值位,那么,128這個數值當作有符號數看待時,其數值就發生了改變。測試例子如下:

    C語言的有符號數的符號位擴展,老司機都滑到

    程序運行結果如下:

    C語言的有符號數的符號位擴展,老司機都滑到

    可以看到,char類型是“有符號數”類型,那么,存儲在char類型變量x中的數據當作“有符號數”看待。所以,128數值存儲在1個字節中的二進制是1000 0000,當以十六進制輸出%x的時候,默認輸出4個字節的寬度,所以,1000 0000中的符號位向高位擴展,擴展到4個字節的空間。所以,得到4個字節中的二進制數據是:1111 1111 1111 1111 1111 1111 1000 000,表示是十六進制就是0xffffff80;

    在第二行輸出中,對變量x的輸出,強制轉換為無符號類型,那么,就把變量x當作無符號數看待,就輸出其數值0x80。

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费