C語言中,為什麼64位下指針變成8位元組?
不然你以為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
一個六十四位的二進位數(地址)需要幾個位元組來表示?
八八六十四嘛,沒毛病
很好奇,什麼人會這麼問?
為什麼沒有蟹邀的小標識,不開心