問題:
char x='abcd';
x=?答案是:x=d;
為什麼呢?
詳解:char x='abcd'中的'abcd'被儲存為乙個int型的整數,這個整數的值是:
乙個int數值 :(97<<8<<8<<8)+(98<<8<<8)+(99<<8)+100);
其中97是'a'的ascii碼;
其中98是'b'的ascii碼;
其中99是'c'的ascii碼;
其中100是'd'的ascii碼;
因為x是char型的,只有8位,故擷取該int的低八位,即'd'的ascii碼100存入x。
下面一段程式證明之:
輸出:1633837924
1633837924
d還有個疑問就是為什麼'abcd'被儲存為int型,這與為什麼#define n 123中的sizeof(n)=4和#define pi 3.14159中的sizeof(pi)=8是乙個道理,凡是常量,編譯器都會給它找乙個合適的資料型別,也就是多少位儲存空間來存放它。'abcd'中的字母的ascii碼是整數的,所以就分配了int型的儲存空間給它,int是32位的,最多放4個char型資料,再多了就放不下了,這就是為什麼上面的語句char x='abcd'最多只能賦值4個字母的原因,再多了編譯器就報錯,因為儲存空間不夠了。
我們最近考試的那個char c='/0xab'與上面是同一種情況,只不過四個字母變成了'/0','x','a','b'罷了。
其實,平時我們寫程式根本不會這麼寫,但遇到了,還是要分析出來。
對 proc buddyinfo的解釋
buddyinfo的理解 cat proc buddyinfo 顯示如下 node 0,zone dma 0 4 5 4 4 3 node 0,zone normal 1 0 0 1 101 8 node 0,zone highmem 2 0 0 1 1 0 其中,node表示在numa環境下的節點...
對ANSI ASCII UNICODE的解釋
通常使用 0x80 0xffff 範圍的 2 個位元組來表示 1 個字元。不同的國家和地區制定了不同的標準,由此產生了 gb2312 gbk gb18030 big5 shift jis 等各自的編碼標準。在簡體中文windows作業系統中,ansi 編碼代表 gbk 編碼 在正體中文windows...
對dbfsize輸出的解釋
oracle rhel63single test which dbfsize oracle rhel63single test oracle rhel63single test oracle rhel63single test oracle rhel63single test dbfsize con...