您可以將十進制轉換為二進制,也可以將二進制轉換為十進制。但是如何表示數字「256」呢?
255 = 11111111
1 個位元組不能超過 8 個二進位數字(位元)。這怎麼可能?
答案1
你問如何用二進位表示256,但我猜你想知道為什麼人們說位元組可以儲存256個不同的數字,而它儲存的最大數字是255。上是第一個數字,1是第二個,2是第三個……255是第256個。
另外,11111111 對於無符號位元組來說只是 255。當您有一個有符號位元組(有符號值是可以保存負值的位元組)時,11111111 實際上是 -1。看http://en.wikipedia.org/wiki/Two's_complement。補碼的工作方式是,將負數與正數相加,結果為0。並留下0. 對於有符號字節,值範圍為 -128 到 127。128 個負數 + 0 + 127 個正數 = 總共 256 個數字。
對於有符號值,第一位是「符號」位元。如果該位被設置,則該數字為負數。 10000000 為負數,01000000 為正數,11111111 為負數,01111111 為正數...
如果您使用的是 Windows(也許 Mac 也有),您可以打開計算器,將其切換到程式設計師模式,選擇 sbyte,然後使用這些位元來查看它們與十進位表示形式之間的關係。
答案2
那你需要 2 個位元組來表示它。 256 = 00000001 00000000
答案3
如您所知,255d(十進位)等於 11111111b(二進位)。如果您現在想要將該值加 1,有兩種可能性:
要嘛你只有8位。在這種情況下,一個所謂的溢出發生。因此,“在內部”,將添加 1,從而得到 100000000b(9 位中的 256d)。但因為只有 8 位元可用,所以低 8 位元將被「回傳」。所以你最終得到 0d = 0b (在大多數電腦架構上都會設定一個特殊的溢出標誌,只是作為旁注。)
將此視為與用手指計數相同。想像一下你的手指顯示 9d。現在您再增加一根手指。最後得到了 10 個。
另一種可能性是您有超過 8 位可用。在這種情況下,您只需在開頭再加一位數字,結果實際上就是 100000000b = 256d。
位元組是電腦系統(記憶體系統)可以尋址的最小“單位”。這意味著,如果您只想知道單個位,則必須要求記憶體系統從地址中為您提供某個字節,然後您必須自己計算您感興趣的位的值。
但與 8 位元組成一個位元組一樣,也有更大的資料類型。 2個位元組組成一個字(16位元),兩個字(4個位元組,32位元)組成一個雙字。現在的標準 64 位元架構甚至有 64 位元資料類型(所謂的暫存器)。