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