關於char 型 的 儲存實質(asc2碼錶的)
阿新 • • 發佈:2019-02-15
起因:有一天一個朋友發來一個程式給我看
#include <stdio.h> void main() { int a,b=322; float x,y=8.88; char cl='k',c2; a=y; \\ a=8 printf("a=%d",a); x=b; \\x=322.000000 a=cl; \\ a等於 字母 k的 asc2 碼 107 ,a=107 <span style="color:#ff0000;"> c2=b; \\ c2 等於 322 這個asc2 碼所對應的 字元</span> printf("a=%d,x=%f,a=%d,c2=%c\n",a,x,a,c2); }
答案的輸出:a=107,x=322.000000,a=107,c2=B;
問題就出現在為什麼c2輸出是 c2=B 呢?
字元型 char
對於單個字元 char ch='B'; 或者 char ch=66; //因為字元在計算器中其實是用asc2 碼錶儲存的,一個字元佔一個位元組(即8位);
對於字串 char ch[80]="abcdefg";// ch[80],字串的長度為80即可以存放79個字元,還有一個到哪去了呢,還有一個 當結束控制符了'\0';
//還有需要提醒的就是 單字元 用 單引號,多字元用雙引號;
好啦前面講的都是寫雞毛蒜皮的事,重點來了,回到上面那個問題 為什麼c2輸出是 c2=B 呢?
先來個asc2碼錶
acs2碼錶的共有128 個字元(0~127);是不是覺得很奇怪呢 c2=322;超過了127呢;
那該怎麼辦呢,但是c2的輸出是 B;
322=2*128+66; //生氣的東西又出現了,那個輸出的c2=322;對應的字元 B 的asc2碼的 值 就是 66;
那麼聰明的你應該懂了吧?
其實我們一個字元付上 整形值,則這個整形值就有對應的asc2碼值,那麼計算機的內部指令是怎麼走的呢 加上你輸入的是c2=m;這裡的m為一個整形數
內部指令為(m+128)mod128= ?;這個問號就是你得到的asc2碼值;
如有疑問/錯誤歡迎廣大網友指出: