C语言的基本数据类型
数据类型是C语言编程中最为基本的组成部分。在C语言中,有4类不同的数据类型:基本类型,构造类型,指针类型及空类型。
char:1个字节—8位—表示范围0 ~ 2^8-1
int: 4个字节—32位—表示范围-2^31 ~ 2^31-1(减1是因为0的缘故)
16 位编译器下, int 为 16 位;
32 位编译器(如:VC使用的编译器cl.exe)下,int为 32位。
基本类型
1、整型
-
int:基本整数型,用于存储整数,占4个字节;默认值为0,数据范围是-2147483648~2147483647
-
short:短整型,占2个字节,存储方式与基本整形int相同,数据范围是-32768-32767
-
long:长整型,占4个字节,数据范围是-263~263-1
-
long long:双长整型,占8个字节,数据范围是-263~263-1;这种数据类型一般比较少用。
2、字符型
- char:字符型,用于存储单个字符,占1个字节。
3、浮点型
- float:单精度浮点型,占4个字节,有效数字为(6~7位),数据范围是-3.4*1038~+3.4*1038
- float型变量是由有限的存储单元组成 ,因此,只能提供有限的有效数字,在有效位以外的数字将不精确,这样,可能会产生一些误差。
- double:双精度浮点型,占8个字节,有效数字为(1516位),数据范围是-1.7*10^-3081.7*10^308。
4.构造类型
- 构造类型就是使用基本类型的数据,或者已经构造好的数据类型,进行使用,设计构造出新的数据类型,使其设计构造的新类型满足待解决问题所需要的数据类型。
5.指针类型
- 指针的值表示的是某个内存地址
6.空类型
-
关键字是void,其主要作用有两个:
1.对函数返回限定
2.对函数参数的限定
一般情况下,一个函数都会有一个返回值,将其值返回调用者。这个返回值应该是具有特定类型的,例如,基本整形int。但是当函数没有返回值时,就可以使用空类型进行设定返回值的类型。
下面通过代码来演示下:
#include <stdio.h>
int main()
{
//统一用字节为单位输出
printf("short:%d\n",sizeof(short));
printf("unsgned short:%d\n", sizeof(unsigned short));
printf("int:%d\n", sizeof(int));
printf("unsigned int:%d\n", sizeof(unsigned int));
printf("long:%d\n", sizeof(long));
printf("unsigned long:%d\n", sizeof(unsigned long));
printf("long long:%d\n", sizeof(long long));
printf("unsigned long long:%d\n", sizeof(unsigned long long));
printf("float:%d\n", sizeof(float));
printf("double:%d\n", sizeof(double));
printf("char:%d\n", sizeof(char));
return 0;
}
演示结果:
由运行结果可知:
char类型的数据类型大小为1字节即8位。
short类型的数据类型大小为2字节即16位。
int类型、long类型、float类型的数据类型大小为4字节即32位。
long long类型、double类型的数据类型大小为8字节即64位。
注意,若整数数据类型前面加unsigned即为无符号整数数据类型,数据类型大小不变。
符号位
前面我们提到计算机最小的存储单位为bit(位或比特),即二进制数所存储的位。但是对于有符号整数数据类型和无符号整数数据类型,这些存储的“位”具体的意义是不同的。
有符号整数数据类型的存储单元中,左边第一位表示符号位,其余位用来存放数值(如果第一位为0,表示该数为正数;如果第一位为1,表示该数为负数)而无符号整数数据类型所有的位数都是用来存放数值的。比如,long int类型变量有32位存储位数,除去左边第一位表示符号位,剩下表示数值的只有31个比特位,而unsigned long int类型变量,32位都用来存放数值。
打印输出类型
ASCII码表
0~127数就是字符
ASCII码规定--把所有的字符转换为对应0~127个数,每个数都可以用一个ASCII来表示
刚好可以用一个字符型去存放一个字符数据
1.输出字符用%c进行输出(控制字符)
2.可以用%d进行输出(输出对应字符的ASCII码值)
3.可以发现:使用字符需要用’单引号进行括起来
常用的字符:’0’~’9’ ‘A’~’Z’ ‘a’~’z’ 记住其中一个的首字母的ASCII的值就可推出其他的值 大小写 字母之前相差32
比如:’0’---48 ‘A’--65 ‘a’--97
数字字符 ‘0’的ASCII值是48 那么我用’0’-48刚好得到整数0
所以字符转整数就减去48 整数转字符就加48
‘A’转‘a’或者 ‘a’转‘A’
字符‘A’是65 字符‘a’是97 两者相减得到 97-65=32
大写字母转小写+32
4.字符串
使用字符串:“ ”双引号括起来的就是字符串
比如“abcd” “12abcACBD”
要考虑占用内存空间,因为是字符的集合
“abcd”占用多少空间呢? ‘a’占用1个字节
占用5个字节
为什么?
字符串结束需要用‘\0’作为结束符,这个符号是隐藏符号,占用1个字节
‘\0’也是一个字符--是一个转义字符,用于结束字符串
什么是转义字符???
有多种意义的字符,叫转义字符 比如我想要输出一个双引号,我该怎么办?
“双引号在编译器中有多种意义,所以想要输出双引号,需要转义,转义用\表示
比如‘\”’
还有很多常用的转义字符,比如说回车,换行,没办法在代码中表示,所以用转义符号表示
给出下列的图表仅供参考:
变量和常量
常量和变量
【知识点】
常量、变量、常变量、标识符?
【内容】
一、常量
定义:在程序运行过程中,其值不能被改变的量称为常量。
常用常量有以下几类:
1.整型常量
十进制整数形式
例如:234,-123
2.实型(浮点型)常量
十进制小数形式:由数字、小数点组成
例如:2.345、-23.345
指数形式:如:1.23e2(相当于1.23 x 10²)
由于在计算机输入输出时,无法表示上角或下角。故规定以字母e或E代表以10为底的指数。但应注意:e或E之前必须有数字,且e或E后面必须为整数。
字符型常量
普通字符:使用单引号括起来,例:'a'
字符常量是以字符对应的ASCII码值的二进制补码形式存储在计算机内存单元中,字符占1个字节。
例如:字符'a'的ASCII码值为97,补码为:01100001
转义字符:常用\开头的特殊字符,意思是将\后面的字符转换成另外的意义
常用的转义字符:
- \'表示单个单引号
- \"表示单个双引号
- \\表示\
- \?表示?
- \n表示换行
- \t表示将输出的位置跳到下一个tab位置,一个tab位置为8列
- \o、\oo、\ooo,其中o代表一个八进制数字:表示与该八进制码对应的ASCII字符
例如:转义字符'\101',表示ASCII字符'A'
\xh[h...],其中h代表一个十六进制数字:表示与该十六进制码对应的ASCII字符
例如:转义字符'\x41',表示ASCII字符'A'
注意:可以表示任何可显示的字母字符、数字字符、专用字符、图形字符和控制字符。
字符串常量:用双引号把若干字符括起来
从其字面形式上即可识别的常量称为“字面常量”或“直接常量”,字面常量是没有名字的不变量。(以上常量皆是字面常量)
符号常量:用# define指令,指定用一个符号名称代表一个常量。
例如: # define PI 3.1416
注意:
行末没有分号;
习惯上符号常量用大写表示;
解析:
- 在对程序进行编译前,预处理器先对PI进行处理,把所有的PI全部置换为3.1416。
- 在预编译后,符号常量已全部变成字面常量。
- 符号常量不占内存,只是一个临时的符号,在预编译后这个符号就不存在了。
二、变量
定义:变量代表一个有名字的,具有特定属性的一个存储单元。
功能:它用来存放数据,也就是存放变量的值。
特点:
- 在程序运行期间,变量的值是可以改变的。
- 变量必须先定义,后使用。
- 变量不能重复定义。
解读:
变量名实际上是以一个名字代表的一个存储地址。在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。
三、常变量
C99允许使用常变量。
定义常变量:
const 数据类型 常变量名 = 常变量值;
注意:通常常变量名全部大写表示。
问题:常变量与常量区别?
- 常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。
- 常变量是有名字的不变量,常量是没有名字的不变量。
问题:符号常量与常变量的区别?
- 符号常量使用# define预处理指令定义,指定用一个符号名称代表一个常量。它是一个临时符号,在预处理后,符号常量已全部置换为字面常量(符号常量不存在了)。符号常量不占存储单元。
- 常变量,占存储单元,有变量值,但该值不能改变。
- 推荐使用常变量,少使用符号常量。
四、标识符
C语言规定标识符只能由字母、数字、下划线组成,且不能是数字开头。也不能使用C语言之中的保留字或关键字作为标识符。C语言对大小写是严格区别的。