一、数据类型分类:
基本数据类型:(内置:编译器自带的类型)int, short long, long long ,char ,float, double
符合数据类型:(多个内置类型组成的新类型)数组,struct, union, enum
二、 定义变量(注意事项:编码规范)
1、变量的可读性:形容词_名词 int n; int sum_result; (英文命名)
2、循环变量: int i; int k;
三、基本数据类型需掌握的知识点
1、各种数据类型的字节长度
(变量占用内存的大小,字节) int sum=5;
注意:计算机表示的内存大小的单位:
8bit位 | 1个字节 | |
16bit | 2个字节 | 半字 |
32bit | 4个字节 | 字 |
1024kB=1MB; 1024MB=1G; 1024G=1T;
sizeof: 计算数据类型和变量的内存大小(sizeof是一个运算符)
比特位:计算机所能描述的计算最小单位
字节: 计算机内存分配的最小单位
测量所有基本数据类型的字节长度:
//测量所有基本数据类型的字节长度 // sizeof默认输出无符号的长整型 unsigned long 所有数据类型改为%ld printf("int = %ld\n",sizeof(int)); // printf("short = %ld\n",sizeof(short)); printf("long = %ld\n",sizeof(long)); printf("char = %ld\n",sizeof(char)); printf("float = %ld\n",sizeof(float)); printf("double = %ld\n",sizeof(double));
输出结果:
char:
2^4=16 2^5=32 2^6=64 2^7=128
2^8=256 2^9=512 2^10=1024
如何测量数据类型的大小?
sizeof 运算符; sizeof(变量名) sizeof(数据类型)
strlen 统计字符串中的字符的个数; 其作用为计算字符串的长度,但是不包括“\0”在内。
2、各种数据类型的取值范围:
计算机是以补码形式保存数据,为了解决+0,-0问题。
***计算机中保存的是一个数的补码:
原码,反码,补码之间的关系:
正数 负数 原码 = 补码 原码 = 补码取反 + 1 补码 = 原码取反 + 1(符号位不参与取反,参与计算 )
- unsigned char : 1字节 = 8bit (0,255)
无符号的字符型数据,因为有8位,所以最低取0,最高取2^8-1=255;范围为(0,255)。
- signed char : 1字节 = 8bit (-128,127)
有符号的字符型数据,因为最左面的一位为符号位,
整数最大值 0111 1111 = 2^7-1=127
负数最小值 1000 0000= >取反=>1111 1111=>加1=>1000 0000=-2^7=-128(符号位参与计算,不参与取反)
1、计算机为什么提出补码?因为存在正零和负零 ;+0 -0
0000 0000 = +0
1000 0000 = -0
2、printf("%d\n",~2); 结果:3
0000 0010
按位取反计算机得到的是补码 1111 1101 为负数
(“~”按位取反,包括符号位,全部取反 )
取反加一得到负数的原码(符号位参与计算,不参与取反):
1000 0010=>加1=>1000 0011=>3
例题1:
char ch = -128;
ch = ch-1;
求ch:
-1的补码=>1000 0001=>取反=>1111 1110=>加1=>1111 1111
-128的补码=>1000 0000=>取反=>1111 1111=>加1=>1000 0000
-128+(-1)=1000 0000 + 1111 1111=(1)0111 1111=127
例题2:
char ch = 127;
ch = ch+1;//出现溢出问题,因为计算+1后 ,将ch的值回写到内存
求ch:
127的补码=>0111 1111
1的补码=>0000 0001
127+1=>0111 1111 + 0000 0001=>1000 0000=-128
例题2:
char ch = 127;
//ch = ch+1;
printf("ch = %d \n",ch+1);//不会出现溢出问题,因为直接将ch的值输出,并未回写到内存