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 ...