計算機存儲數據的格式

概述

計算機存儲的格式是二進制位,8個二進制位表示一個字節,在計算機中二進制位有原碼,反碼和補碼的格式,下面分別介紹

  • 原碼:最高位表示符號位,正數0,負數1;其余7位表示數值因此,一字節原碼的表示范圍-127到127

  • 反碼:正數的反碼和原碼相同,負數的反碼為除符號位其余取反即,0變1,1變0,一字節原碼的表示范圍-127到127

  • 補碼:正數的補碼和原碼相同,負數的補碼為反碼+1,一字節原碼的表示范圍-128到127

為了簡化基礎電路設計,計算機中加法就是將兩個二進制位相加,減法就是加上一個負數,對應的符號位參與運算,乘法是左移運算,除法是右移運算

使用原碼進行計算,結果不正確,

1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2

使用反碼計算,在0的時候會出問題,雖然邏輯上我們理解的0和-0是一樣的,但是在反碼中的表示不一樣0的反碼是0000 0000,-0的反碼是1111 1111

1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

使用補碼計算,結果正確,在補碼中不管是0還是-0補碼都為0000 0000

1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]補 + [1111 1111]補 = [0000 0000]補=[0000 0000]原

補碼的最小值為-128

(-1) + (-127) = [1000 0001]原 + [1111 1111]原 = [1111 1111]補 + [1000 0001]補 = [1000 0000]補=-128

因此計算機中存儲一個字節是使用補碼來表示,一個字節表示-128到127

編碼

計算機保存數據是通過保存二進制數據,我們使用的字符在計算機內存儲的僅僅是二進制數據,那為啥會出現亂碼呢?這里就涉及到編碼和字符集的問題

最初計算機中只有ASCII字符集和編碼,只表示128個字符;后來計算機發展字符和編碼需要擴充,就有了Unicode字符集和對應的UTF-8,UTF-16等編碼。Unicode字符集表示了各個國家100多萬字符。中國也有自己的字符集和字符編碼,如GBK和GB18030

字符集相當于字典,每一個字符都有唯一的一個id,編碼就是字符在計算機中存儲的形式,比如:UTF-8將字符集中的每一個字符id通過一個算法獲得了這個字符在計算機中的儲存格式,幾個字節,每個字節的大小,因此盡管UTF-8和UTF-16都是基于Unicode字符集,但是同一個字他們的存儲字節數,每個字節大小幾乎不盡相同

亂碼出現的原因就是,我這個字是基于UTF-8存儲的,你使用UTF-16的編碼來想翻譯我,對不起,對應的字節數和字節大小和你想表達的字不是同一個,只能給你亂碼顯示了,比如“漢”字在這兩種編碼中就有不同的顯示。

字符集和字符編碼一般都是同時制定的,編碼不止字符編碼,還有圖像聲音編碼等來保存音頻視頻

參考文章
原碼,反碼,補碼詳解
徹底理解字符編碼

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1個字節8位,不夠8位左邊加0湊夠8位。 計算機內存存儲 0 和 1 計算機內存之中只存儲0和1(二進制),通過硬...
    饑人谷_風爭閱讀 819評論 0 0
  • 編程基礎 1.硬件與軟件:計算機的運行原理《編碼》 2.最大的軟件:操作系統 維基百科 3.自己寫軟件:數據結構...
    饑人谷_張樂閱讀 669評論 0 2
  • 在計算機中所有的數據都被存儲為一連串的二進制信息(0和1)。在這里我將淺談這些二進制信息是如何表示計算機中的字符和...
    chiang24閱讀 2,250評論 0 2
  • 編程基礎 1,硬件與軟件:計算機的運行原理(《編碼》)2,最大的軟件:操作系統(維基百科)3,自己寫軟件:數據結構...
    yytyff閱讀 338評論 0 0
  • 下拉菜單 demo BFC 兩欄布局 demo 負邊距 兩欄布局 demo 負邊距 等邊布局 demo 圣杯三欄布...
    petertou閱讀 298評論 0 0