日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为什么0x100是256个字节、0x400是1KB、0x800是2KB、0x1000是4KB?

發布時間:2023/12/8 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为什么0x100是256个字节、0x400是1KB、0x800是2KB、0x1000是4KB? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 數據單位標準
    • 兩種標準
  • 0x400為什么是1KB大小?
  • 回到開始的問題
  • 附錄1:存儲單位之間的換算
  • 附錄2:常見的16進制地址及其對應容量

前言

在剛開始學習嵌入式時我們就遇到各種進制之間的換算,十六進制、十進制、八進制、二進制等等,一開始會經常在各種進制之間迷失自我;
在深入學習或者做項目或者工作時我們也經常要查看各種芯片的數據手冊(datasheet),手冊里面一般都是使用十六進制表示各種地址。
這時我們就會遇到類似這樣的問題:

  • 為什么 0x100 是 256Bytes(字節) 大小?
  • 0x400 是 1KB 大小?
  • 0x800是 2KB 大小?

下面我們就來解決這個疑惑!

數據單位標準

我們都知道數據單位有:bit、byte、word、KB、MB、GB、TB等等,他們之間的換算很簡單,例如:

- 1TB=1024GB- 1GB=1024MB- 1MB=1024KB- 1KB=1024B(Byte)- 1B=8bit

從上面的換算我們可以不難理解下面的兩個基本約定:

  • bit(比特):bit是數據的最小單位,通常簡寫為b。在計算機中通常用1和0來表示。
  • Byte(字節):數據存儲的基本單位,通常簡寫為B。通常:1Byte=8bit。

但是這些都是誰規定的呢?我們得先要解決這個疑惑。

兩種標準

目前,有兩種比較流行的單位:一種為SI(International System of Units,國際單位制)制定的標準,采用十進制換算。例如:

1 MB = 106 bytes = 1 000 000 bytes = 1000 kilobyte 1024 MB = 1 gigabyte (GB)

其中kilo、giga等稱為十進制前綴,通常簡寫為KB、GB等。

另一種則為IEC(International Electrotechnical Commission,國際電工委員會)于1998年2月制定的標準(IEC 60027-2),采用二進制換算。例如:

1 MiB = 2^20 bytes = 1 048 576 bytes = 1024 kibibytes 1024 MiB = 1 gibibyte (GiB)

其中kibi、gibi等稱為二進制前綴,通常簡寫為KiB、GiB等。

下圖是兩種單位標準的wiki截圖,摘自wiki:

IEC制定的這個標準用于在一些更嚴格的場景下(希望使用二進制換算的情況)替換SI的標準,目前已為大多數組織所接受,像現在的許多Linux發行版也采用這種單位。

在本文中我們只關注我們常用到的 IEC 制定的標準,所有的討論均是在 IEC 制定的 IEC 60027-2 標準基礎上。

拓展閱讀:

  • https://en.wikipedia.org/wiki/Byte
  • https://simple.wikipedia.org/wiki/Mebibyte

0x400為什么是1KB大小?

為了說這個問題,我們以 2440 的芯片手冊為例,下面的圖是 NAND閃存映射:

下面圖引用自 S3C2440A_UserManual_Rev13.pdf :p222


我們重點看 0x4000 0000 - 0x4000 0FFF 這段內存空間。圖中說明這個4kb的空間是分配給BootSRAM,這個 4KB 結果的換算過程:

1. 0x4000 0FFF - 0x4000 0000 = 0x0000 0FFF 2. 0x0000 0FFF 的十進制是 4095 (Bytes) 3. (4095+1) / 1024 = 4 (KB)

為什么 0x0000 0FFF 的十進制是 4095 ,而且這就是代表 (4095+1) 個字節(也就是4KB)呢?下面我們一起來解開這個疑惑:

下圖是2440的內存布局圖 (0x0000 0000 - 0xFFFF FFFF)。
2440的CPU是32bit的,地址總線一共有 32(2^5) 根,可以索引的地址范圍是0 - 2^32 (0x0000 0000 - 0xFFFF FFFF) ,也就是 4GB 的空間。

那么這個 4GB 是怎么得來的呢?
下面的圖已經給出了很直觀的答案了,2440的CPU是 32 位的,所以表示的范圍是:

從 0000 0000 0000 0000 0000 0000 0000 0000 (0x0000 0000)1111 1111 1111 1111 1111 1111 1111 1111 (0xFFFF FFFF)

一個字節有8位,從下面的圖可知,一共有 0xFFFF FFFF 個字節,也就是 4,294,967,295 個字節( 0xFFFF FFFF 轉換后的十進制),所以大小為:4,294,967,295 Bytes = 4,194,305KB = 4095MB
但是這里為什么不是 4096 呢?因為我們計算的范圍是 0x0000 0000 - 0xFFFF FFFF ) ,并沒有算第1個字節(Byte),所以上面的應該是一共有 0xFFFF FFFF+1 個字節,也就是:4,294,967,296 Bytes = 4,194,306KB = 4096MB = 4GB

上面的案例基于 2400,其他芯片也是一樣的思路分析即可。不管他是8位、16位、32位還是64位,我們只要知道他們的能表示的最大范圍即可

回到開始的問題

到這里我們就能理解為什么在 2440的芯片手冊中,分配給BootSRAM的 0x4000 0000 - 0x4000 0FFF 是 4KB 大小了 。

那么我們來解決一開始提出的問題: 為什么0x400是1KB大小?

0x400轉換的十進制為:1024,也就是有 1024 個字節(Byte),
1KB的換算過程:1024(Byte)/1024=1kb。

用這種思路我們就可以理解為什么, 0x100 是 256 個字節(Bytes)、0x800是 4096 個字節(Bytes)也就是 4KB。

附錄1:存儲單位之間的換算

1 Byte(B)8 bit
1 Kilo Byte(KB)1024B
1 Mega Byte(MB)1024 KB
1 Giga Byte (GB)1024 MB
1 Tera Byte(TB)1024 GB
1 Peta Byte(PB)1024 TB
1 Exa Byte(EB)1024 PB
1 Zetta Byte(ZB)1024 EB
1Yotta Byte(YB)1024 ZB
1 Bronto Byte(BB)1024 YB
1Nona Byte(NB)1024 BB
1 Dogga Byte(DB)1024 NB
1 Corydon Byte(CB)1024DB
1 Xero Byte (XB)1024CB

附錄2:常見的16進制地址及其對應容量

十六進制大小
0x100256B
0x200512B
0x4001KB
0x8002KB
0xC003KB
0x10004KB
0x20008KB
0xF00060KB
0x1 000064KB
0x2 0000128KB
0xF 0000960KB
0x10 00001MB
0x20 00002MB
0xF0 000015MB
0x0100 000016MB
0x0200 000032MB
0x0F00 0000240MB
0x1000 0000256MB

總結

以上是生活随笔為你收集整理的为什么0x100是256个字节、0x400是1KB、0x800是2KB、0x1000是4KB?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。