關於char 型 的 存儲實質(asc2碼錶的)

 起因:有一天一個朋友發來一個程序給我看

#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碼值;

  如有疑問/錯誤歡迎廣大網友指出:

   



發佈了26 篇原創文章 · 獲贊 38 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章