int型和char型之間的型別轉換
目前絕大多數編譯器,int 型資料佔 4 位元組, char 型佔 1 位元組。進行不同資料的強制轉換其實就是資料佔用位元組擴充或者截斷。
比如
int a;
char b;
a=(int)b;
b=(char)a;
由 b 轉換成 int 型資料就是將 b 擴充 3 個位元組;而將 a 轉換成 char 型資料就是將 a 的最低位位元組截取出來。因此,將資料由值域較寬型別強制轉換到值域較窄型別時,有可能出現數據信息丟失。
char 型資料在機器裡通過 ASCII 碼儲存,也就是用一個整數儲存的。譬如字元 ’ 0 ‘,對應的 ASCII 碼的十進位制數 是 48,因此強制轉換成 int 後,是 48,而不是 0 .
字元’ ‘(空格)的ASCII碼為32.
字元’A’的ASCII碼為65,然後是’B’ ‘C’ … ‘Z’
字元’a’的ASCII碼為97,然後是’b’ ‘c’ … ‘z’
字元’0’的ASCII碼為48,然後是’1’ ‘2’ ‘3’ … ‘9’
所以,要想把一個數字字元ch,轉為一個整數,就是ch-‘0’當然ch-48也行
例如把’3’轉換為3,就是’3’-‘0’
因為C和C++中,字元和整型是一樣的,可以隱式轉換。
int a=257 char b=127 b=a 列印結果為什麼是b=1?
原因是一個整數佔4個位元組,一個char只佔一個位元組,當int轉char時,會選擇int的最低位開始擷取一個位元組來付給char,而現在257在記憶體中為10000000 00000000 00000001 00000001把最後的00000001付給了char所以就是1。
1位元組(Byte) = 8二進位制位=8bits
位元組(Byte)是通過網路傳輸資訊(或在硬碟或記憶體中儲存資訊)的單位。
位元組是計算機資訊科技用於計量儲存容量和傳輸容量的一種計量單位,1個位元組等於8位二進位制。
在ASCII碼中,一個英文字母(不分大小寫)佔一個位元組的空間,一箇中文漢字佔兩個位元組的空間。
英文標點佔一個位元組,中文標點佔兩個位元組。
例子:
int a=0x111191191;
char b;
b=a;
則b的值為多少?
程式:
#include<stdio.h>
int main(){
int a=0x111191191 ;
char b;
b=a;
printf("%x\n",b);
return 0;
}
結果:
ffffff91
將程式修改為:
#include<stdio.h>
intmain(){
int a=0x111191191;
unsigned char b;
b=a;
printf("%x\n",b);
return 0;
}
結果:
91
上邊兩例都是從大的向小的的轉型,則利用位元組截斷。小的向大的呢?與上邊類似,再舉一例。
程式:
#include<stdio.h>
intmain(){
int a;
char b=0x91;
a=b;
printf("%x\n",a);
return 0;
}
結果:
ffffff91
這種問題分析的關鍵是:
1、這種資料的有效位是多少位?
2、等號左邊的數值只會在等號右邊的數值中取自己的有效位數(char就只取右邊資料的低八位)。