1位元組不是一定是8位。

2021-10-08 17:34:15 字數 872 閱讀 6696

sizeof返回的是以位元組(byte)為單位的大小,char的大小永遠都是1位元組。

位元組通常情況下為8位,但是不是必然,也可能是別的大小,比如ti的28x系列dsp裡 乙個位元組的大小為16位。

前段時間,發現乙個沒見過的事情,ti的28x系列dsp中,乙個char佔據的空間是16位的,但是sizeof(char)的返回值是1。

一開始沒注意,後來在程式裡讀檔案,發現讀到的值和預期的效果有差異,除錯看記憶體發現從檔案讀進的乙個連續的char的陣列,竟然是16位16位佔空間的。給char的變數賦值0xffff也可以正常的賦值,記憶體裡顯示的變數內容就是0xffff。於是我認為這個char大小就是16位。

雙方僵持不下,當時dsp這塊板子也不在身邊,沒辦法talk is less, show me the code。

於是開始翻c89的規範。

裡面很明確的提到了sizeof返回的是以byte為單位的大小,而且sizeof(char)的返回值必然為1,也就是1byte。

當時我的認知一直認為乙個byte就是8位,所以感覺,這裡的c標準在自相矛盾,懷疑是這句子裡存在著我不懂的語法,導致我的理解問題有問題(後來證明我想太多)。

note這一段講的非常清楚。這個系列的byte大小是16位的。又去搜了下byte這個詞條,發現wiki上也沒有說byte一定是八位的。

所以問題解決,結論見上。

為什麼1位元組是8位

因為計算機用二進位制,所以希望基本儲存單位的是2的n次方。2 1 2 可以表示 4 個符號 2 2 4 可以表示 16 個符號 2 3 8 可以表示 256 個符號 2 4 16 可以表示 65536個符號 考慮需要表示英文本元和數字以及一些符號的數量,大家認為用幾位來表示比較合適?早期 其實也不早...

8位位元組對齊演算法

參考文章 8bit對齊演算法 void testalign 1byte 1位元組對齊 unsigned int align8bit unsigned int n 2byte 2位元組對齊 unsigned int align16bit unsigned int n 4byte 4位元組對齊 unsi...

mysql 字串後8位 字元的一位元組8位問題

include int main char a 1000 int i for i 0 i 1000 i a i 1 i printf d n strlen a return 0 此題看上去真的很簡單,但是卻鮮有人答對。答案是255。別驚訝,我們先分析分析。for 迴圈內,當i 的值為0 時,a 0 ...