不然你以為64位是啥東西64位?


現在先引入一個計算機常識,那就是,無論是什麼類型的指針變數,在32位系統下,一個指針變數所佔用的空間是4個位元組,在64位下,一個指針變數所佔用的空間是8個位元組。

那麼為何會是這個值呢?就聽我給你細細講來。

首先,我們得知道另一個計算機常識,那就是,一個位元組(byte)佔用多少位(bit),沒錯,是8位。這裡,你可能會發現一個有趣的地方,32 bit == 4 byte , 64 == 8 byte。這不是巧合,哈哈哈。

現在我問你一個問題,64位能表示的數值個數是多少?很簡單,2^64個,數值範圍就是從0到2^64 - 1,這也是如今64位CPU的定址範圍,用16進位表示就是:0---FFFF FFFF FFFF FFFF(F是數值15,二進位就是1111,剛好是四位,所以2個16進位位就是一個位元組),那麼重點就從這兒開始了,如果想讓一個指針變數存儲的數值能表示完所有的定址範圍(也就是所有的地址值),那麼毋庸置疑,他的存儲空間必須是大於等於64bit,也就是8個位元組,少一個bit,都不能完整的表示完所有的定址範圍,剛好,8個位元組剛好能不多一位不少一位的表示完所有的定址範圍,因此就是8個位元組。同理的32位下就是4個位元組


比較現代的計算機系統,1 個位元組可以存儲 8 個二進位位。所以存儲和表示 64 個二進位位需要 8 個位元組。

64 bit = 8 byte


一個六十四位的二進位數(地址)需要幾個位元組來表示?


八八六十四嘛,沒毛病


很好奇,什麼人會這麼問?


為什麼沒有蟹邀的小標識,不開心

一個位元組(byte)佔用8位(bit)。32 bit == 4 byte , 64 == 8 byte。

詳細說就是64位表示的數值個數是2^64個,範圍是0到2^64 - 1,用16進位表示就是0---FFFF FFFF FFFF FFFF。F是15,二進位是1111,是四位,所以兩個16進位位是一個位元組。一共八個位元組。一個指針變數的存儲空間必須大於等於64bit,8位元組,才能表示完所有的定址範圍。8個位元組剛好能表示完所有的定址範圍,所以就是8個位元組。


以32位舉例:

已知條件:

  1. 一個指針存儲一個地址
  2. 32位機器,定址範圍最大長度是32bit,即4個位元組,因此需要一個指針存儲32bit。
  3. C語言採用16進位數存儲地址
  4. 指針存儲的值就是一個十六進位數,代表一個地址。

作答如下:

因為,16進位下,F的二進位為1111。所以一個十六進位數的存儲需要需要4bit。

所以8個十六進位數,就需要32個bit。

所以32位系統下的指針需要用8個十六進位數存儲一個地址。

同理可得,64位操作系統下,定址範圍的最大長度為64bit,需要用16個十六進位數。

表示16個十六進位數,需要4乘16bit,即8Byte


推薦閱讀:
相关文章