基本类型数据
字符类型
字符类型名称是char,里面包含256个整数,每个整数和一个字符数据(例如’&’)对应,整数和字符数据可以互相替代
ASCII码表记录所有整数和字符数据之间的对应关系
‘a’ —97
‘A’ —65
‘0’ —48
ASCII码表里所有小写英文字母是连续的,并且’a’最小,'z’最大,大写英文字母和数字字符也都符合这个规律
‘d’ - ‘a’ = 3
‘D’ - ‘A’ = 3
‘3’ - ‘0’ = 3
我们的计算机里字符类型包含的数字范围从-128到127,在有些计算机里字符类型包含的数字范围从0到255
所有计算机里0到127之间的整数对应的字符都一样
‘\n’ 换行
'\r ’ 回车
符号类型
- 短整数类型
短整数类型名称是short,里面包含65536个不同的整数 - 长整数类型
长整数类型名称是long,里面包含2的32次方个不同的整数 - 整数类型
整数类型名称是int,在我们的计算机里整数类型和长整数类型完全一样
以上类型都叫做有符号类型,它们里面都是既包含负数又包含非负数
每个有符号类型都有一个对应的无符号类型,字符类型名称是char,它所对应的无符号类型名称是unsigned char(无符号字符类型)
其它类型与此类似,所有无符号类型里不包含负数
程序里所有不带小数点的数字默认都是整数类型的,不带小数点的数字后加 u 表示数字是无符号整数类型的
浮点类型
浮点类型用来表示带小数点的数字,浮点类型分为单精度浮点类型和双精度浮点类型
双精度浮点类型可以记录更多小数点后面的数字,单精度浮点类型名称是float,双精度浮点类型名称是double
程序里所有带小数点的数字默认都是双精度浮点类型的
带小数点的数字后加f表示数字是单精度浮点类型的
布尔类型
C语言里可以扩展新的数据类型,C99规范里引入布尔类型,布尔类型里只包含0和1两个整数,0叫做假,1叫做真,真和假都叫做布尔值
所有整数都可以作为布尔值使用,0做布尔值使用的时候是假,其他整数做布尔值使用的时候都是真
数据类型和占位符的对应关系
char ----------------------%c和%hhd
unsigned char ---------%c和%hhu
short --------------------- %hd
unsigned short -------- %hu
long -----------------------%ld
unsigned long ----------%lu
int --------------------------%d
unsigned int -------------%u
float -----------------------%f或%g
double --------------------%lf和%lg
%f和%lf会保留小数点后面多余的0,%g和%lg不会保留
存储区占用字节个数及scanf函数
不同类型存储区所包含的字节个数不同,sizeof关键字可以用来计算一个存储区里包含的字节个数
char和unsigned char 1个字节
short和usigned short 2个字节
long和unsigned long 4个字节
int和unsigned int 4个字节
float 4个字节
double 8个字节
sizeof关键字后面的小括号里对任何存储区内容的修改不会真正发生
scanf标准函数可以从键盘得到数字并记录到变量里为了使用这个标准函数需要包含 stdio.h 头文件
scanf函数调用语句的双引号里不要包含占位符以外的内容,如果用户输入的内容和希望的格式不一样,就无法获得数字
scanf函数调用语句可以同时获得多个数字
进制转换
一个字节分为八段,每段可以记录一个0或者1,要想把一个数字记录到字节里就必须首先把它拆分成八个0或者1
二进制转换
采用一组0或者1表示数字的方法叫二进制表示方式,二进制和十进制是两种表示数字的方式,它们各自用在不同的环境下
计算机只能记录以二进制方式表示的数字,二进制表示方式里每个数位有一个编号
编号方式如下:
7 6 5 4 3 2 1 0 (数位编号)
0 0 0 0 0 0 0 0 (数位)
二进制表示方式里每个1单独代表一个数字,这个数的数值就是2的数位编号次方
7 6 5 4 3 2 1 0 (数位编号)
0 0 0 0 0 0 0 0 (数位)
0 0 0 1 0 0 0 0 (2的4次方,4是数位编号)=16(十进制表示)
如果两个相邻数位的内容一样那左边的数字是右边数字的2倍
7 6 5 4 3 2 1 0 (数位编号)
0 0 0 0 0 0 0 0 (数位)
0 1 1 0 0 0 0 0 (第6位的1代表2的6次方,第5位的1代表2的5次方.第6位的1是第5位1的2倍)
用二进制表示的非负数符合以上规律
二进制数字加一的时候把最右边的多个连续的1都变成0,把最右边的0变成1(这些1必须从编号为0的位置开始,0无所谓)
例如:
00101111 + 1
00110000
用二进制表示的非负数去掉最右边的数位结果相当于这个数字除以2并保留整数部分
7 6 5 4 3 2 1 0 (数位编号)
0 1 1 0 1 0 1 1 (数位)
6 5 4 3 2 1 0 (数位编号)
0 1 1 0 1 0 1 (数位)
二进制表示的非负数转换成十进制的时候,可以把每个数位的内容单独转换然后再求和
例如:
0110 1010 = 2的6次方 + 2的5次方+ 2的3次方 + 2的1次方
= 64 + 32 + 8 + 2
= 106
十进制转换
十进制表示的非负数转换成二进制
12=0000 1100(二进制)
对原始数字多次进行除以2并保留整数部分的操作得到一组数字,用每个数字除以2取余得到一个数位的内容,把得到的所有数位内容从后向前倒序书写就得到转换结果
例如:91
91/2=45… 1
45/2=22… 1
22/2=11…0
11/2= 5… 1
5/2 = 2… 1
2/2 = 1… 0
1/2 = 0… 1
0/2 = 0… 0
转换结果是0101 1011
负数的十进制和二进制之间不可以直接转换,必须借助相反数
转换过程分三步:
1.首先计算相反数
2.把得到的相反数转换成另外的格式
3.根据转换结果再计算一次相反数
为了计算一个二进制数字的相反数,可以把每个数位的内容都变成相反数,然后再加一
01101011 (原始数字)
10010100 + 1 = 10010101 (相反数)
01101010 + 1 = 01101011 (再次计算相反数又回到原始数字)
十进制表示的负数转换成二进制的练习:
-14
14 (计算相反数)
0000 1110 (把相反数转换成二进制)
1111 0001 + 1 = 1111 0010 (再次计算相反数)
符号类型数字才有符号,二进制数字最左边的数位叫做符号位,它的内容可以用来确定数字的符号,符号位的内容是0表示数字是非负数,符号位的内容是1表示数字是负数
1011 0110 (如果作为字符类型数字就是负数)
0100 1001 + 1 = 0100 1010
74
-74
八进制简单介绍
把二进制数字的数位从右向左每三个数位分为一组,每组用一个0到7之间的数字替换就得到数字的八进制表示方式
0110 1010 01 101 010 152(八进制)
可以直接在程序里用八进制表示方式写数字,这种数字必须以0做开头,使用%o做占位符可以把数字的八进制表示方式显示在屏幕上
十六进制简单介绍
把二进制数字所有数位从右向左每四个数位分为一组,每组用一个字符替换(用a到f之间的字母替换10到15之间的数字),这个替换结果叫做数字的十六进制
表示方式:
1100 1011 cb(十六进制)
可以直接在程序里用十六进制方式书写数字,这种数字必须用0x做开头,可以使用%x或%X做占位符把数字的十六进制表示方式显示在屏幕上
,用%x做占位符的时候显示结果里所有字母都是小写的,用%X做占位符的时候显示结果里所有字母都是大写的