1、C語言中的資料型別:
2、學習資料型別的三個要素:
1、儲存資料的寬度
2、儲存資料的格式
3、作用範圍(作用域)
3、整數型別:char short int long
char 8BIT 1位元組
short 16BIT 2位元組
int 32BIT 4位元組
long 32BIT 4位元組
#include "stdafx.h" void Plus(){ char A =0xFF; short B = 0xFF; int C = 0xFF; //在一個大括號裡變數不能重複 } int main(int argc, char* argv[]) { Plus(); return 0; }
void Plus(){ 00401020 push ebp 00401021 mov ebp,esp 00401023 sub esp,4Ch 00401026 push ebx 00401027 push esi 00401028 push edi 00401029 lea edi,[ebp-4Ch] 0040102C mov ecx,13h 00401031 mov eax,0CCCCCCCCh 00401036 rep stos dword ptr [edi] 7: char A =0xFF; 00401038 mov byte ptr [ebp-4],0FFh //區域性變數 8: short B = 0xFF; 0040103C mov word ptr [ebp-8],offset Plus+20h (00401040) 9: int C = 0xFF; 00401042 mov dword ptr [ebp-0Ch],0FFh 10: //在一個大括號裡變數不能重複 11: } 00401049 pop edi 0040104A pop esi 0040104B pop ebx 0040104C mov esp,ebp 0040104E pop ebp 0040104F ret
有符號和無符號:在記憶體中儲存是完全一樣的,在使用的時候,要告訴計算機是當什麼用。型別轉換--比較大小和數學運算
#include "stdafx.h" void Plus(){ char i =0xff; unsigned char a=0xff; //無符號和無符號 存的是一樣 } int main(int argc, char* argv[]) { Plus(); return 0; }
4、浮點型別:float double
7: float i =12.5; 00401038 mov dword ptr [ebp-4],41480000h
float和double在儲存方式上都是遵從IEEE的規範的
將一個float型轉化為記憶體儲存格式的步驟為:
1、先將這個實數的絕對值化為二進位制格式
2、將這個二進位制格式實數的小數點左移或右移n位,直到小數點移動到第一個有效數字的右邊。
3、從小數點右邊第一位開始數出二十三位數字放入第22到第0位。
4、如果實數是正的,則在第31位放入“0”,否則放入“1”。
5、如果n 是左移得到的,說明指數是正的,第30位放入“1”。如果n是右移得到的或n=0,則第30位放入“0”。
6、如果n是左移得到的,則將n減去1後化為二進位制,並在左邊加“0”補足七位,放入第29到第23位。
如果n是右移得到的或n=0,則將n化為二進位制後在左邊加“0”補足七位,再各位求反,再放入第29到第23位。
7: float i =0.25F; 00401038 mov dword ptr [ebp-4],3E800000h
-2-1=-3 ,FF -1 FE -2 FD -3
FD = 1111 1101
0011 1110 1000 0000 0000 0000 0000 0000
3E8000
5、英文字元儲存
ASCII:
1、ASCII 碼使用指定的 7 位或 8 位二進位制陣列合來表示 128 或 256 種可能的字元。
2、標準 ASCII 碼使用 7 位二進位制數來表示所有的大寫和小寫字母,數字 0 到 9、標點符號,以及在美式英語中使用的特殊控制字元。
3、擴充套件 ASCII 碼允許將每個字元的第 8 位用於確定附加的 128 個特殊符號字元、外來語字母和圖形符號。
標準ASCLL碼錶擷取:
二進位制 十進位制 十六進位制 字元 0100 0001 65 41 A 0100 0010 66 42 B 0100 0011 67 43 C 0100 0100 68 44 D 0100 0101 69 45 E 0100 0110 70 46 F 0100 0111 71 47 G 0100 1000 72 48 H 0100 1001 73 49 I 0100 1010 74 4A J 0100 1011 75 4B K 0100 1100 76 4C L 0100 1101 77 4D M 0100 1110 78 4E N 0100 1111 79 4F O 0101 0000 80 50 P 0101 0001 81 51 Q 0101 0010 82 52 R 0101 0011 83 53 S 0101 0100 84 54 T 0101 0101 85 55 U 0101 0110 86 56 V 0101 0111 87 57 W 0101 1000 88 58 X 0101 1001 89 59 Y 0101 1010 90 5A Z
6、中文字元儲存
計算機發明之處及後面很長一段時間,只用應用於美國及西方一些已開發國家,ASCII能夠很好滿足使用者的需求。
但是當天朝也有了計算機之後,為了顯示中文,必須設計一套編碼規則用於將漢字轉換為計算機可以接受的數字系統的數。
天朝專家把那些127號之後的奇異符號們(即EASCII)取消掉,規定:一個小於127的字元的意義與原來相同,
但兩個大於127的字元連在一起時,就表示一個漢字,前面的一個位元組(他稱之為高位元組)從0xA1用到 0xF7,後面一個位元組
(低位元組)從0xA1到0xFE,這樣我們就可以組合出大約7000多個簡體漢字了。
在這些編碼裡,還把數學符號、羅馬希臘的 字母、日文的假名們都編進去了,連在ASCII裡本來就有的數字、標點、字母都
統統重新編了兩個位元組長的編碼,這就是常說的"全形"字元,而原來在127號以下的那些就叫"半形"字元了。
上述編碼規則就是GB2312或GB2312-80