C语言,day03

来源:互联网 发布:2016淘宝刷单被降权 编辑:程序博客网 时间:2024/05/14 18:38

字符类型名称是char
这个数据类型里包含256个不同的整数,每个整数可以代表一个字符(例如’^’,’a’等)
这些字符和整数可以互相代替
ASCII码表里包含所有字符和整数之间的
对应关系
‘a’ 97
‘A’ 65
‘0’ 48

ASCII码表里所有小写英文字母是连续排列的,字符’a’对应的整数最小,字符’z’对应的整数最大
所有大写英文字符和阿拉伯数字字符也符合这个规律

‘d’ - ‘a’ 等于 ‘D’ - ‘A’
‘d’ - ‘a’ 等于 ‘3’ - ‘0’ 等于 3 - 0

所有字符被分成两组,每组包含128个
其中一组字符和整数的对应关系在所有计算机上都一样,它们对应的整数范围从0到127
另外一组字符和整数的对应关系在不同计算机上可能不同,这些字符对应的整数可能从-128到-1也可能从128到255

‘\n’ 换行字符
‘\r’ 回车字符
‘\’ \字符
‘\” ‘字符
‘\”’ “字符

短整数类型名称是short
它里面包含65536个整数,其中一半是负数另外一半是非负数。以数字0为中心向两边扩展

长整数类型名称是long
它里面包含2的32次方个不同的整数,其中一半是负数另外一半是非负数。以数字0为中心向两边扩展。

整数类型名称是int
在我们的计算机里整数类型和长整数类型完全一样

以上数据类型统称为有符号类型,因为包含的数字有正有负
每个有符号类型都有一个对应的无符号类型,无符号类型的名称就是在对应有符号类型名称前加unsigned
无符号类型里只包含非负数,它们包含的数字个数和对应有符号类型包含的个数一样

以上数据类型包含的数字范围是互相重叠的

程序中不带小数点的数字后加u表示数字的类型是无符号整数类型

C语言里使用浮点类型表示带小数点的数字
浮点类型分为单精度浮点类型和双精度浮点类型
双精度浮点类型可以记录更多小数点后面的数位
单精度浮点类型名称是float
双精度浮点类型名称是double

程序中带小数点的数字默认是双精度浮点类型
如果在带小数点的数字后加f表示数字类型是单精度浮点类型

C语言里可以扩展新的数据类型
这些扩展出来的数据类型叫做复合数据类型
复合数据类型需要先定义然后才能使用

布尔类型是C99规范中引入的数据类型
这个类型里只包含0和1两个整数,0叫做假1叫做真

任何一个整数都可以当作布尔值使用,0当作布尔值使用的时候代表假,其它所有整数当作布尔值使用的时候代表真

一般不需要使用布尔类型

数据类型和占位符的对应关系
char和unsigned char %c
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不会保留

不同类型存储区所包含的字节个数不同
sizeof关键字可以用来计算一个数据类型,存储区或数字在内存里占的字节个数

char和unsigned char 1个字节
short和unsigned short 2个字节
int和unsigned int 4个字节
long和unsigned long 4个字节
float 4个字节
double 8个字节

sizeof后面小括号里如果修改了任何存储区的内容则这种修改不会真正发生

scanf标准函数可以从键盘得到用户输入的数字并记录到存储区里
为了使用这个标准函数需要包含stdio.h头文件
scanf函数调用语句里应该使用存储区的地址表示存储区
scanf函数调用语句里需要使用占位符表示存储区的类型
在scanf函数调用语句双引号里不要写不是占位符的内容
可以在一条scanf函数调用语句里获得多个数字
如果用户输入的数字格式和程序希望的格式不一致可能影响后面获得的数字

一个字节可以分成八段,每段可以记录一个0或者1
要想把一个数字记录到一个字节里就必须首先把数字拆分成八个0或者1
采用一组0或者1表示数字的方法叫二进制
任何数字既可以采用十进制方式表示也可以采用二进制方式表示
计算机里只能记录用二进制方式表示的数字
二进制表示方式中每个数位有一个编号,最右边数位的编号是0,向左依次递增
某个数位上的1单独代表一个数字,这个数字就是数位编号次方
二进制表示方式中如果两个相邻数位内容一样则左边数位所代表的数字是右边数位代表数字的2倍
用二进制表示的非负数符合以上规律
二进制加一时要把最右边数位开始的连续多个1变成0,把最右边的0变成1

二进制表示的非负数转换成十进制的时候只需要把每个数位上的1单独转换,然后把转换结果求和

0110 1001 = 2的6次方 + 2的5次方 + 2的3次方+ 2的0次方
= 64 + 32 + 8 + 1
= 105

0010 1110 = 2的5次方 + 2的3次方 + 2的2次方+ 2的1次方
= 32 + 8 + 4 + 2
= 46

非负数十进制转换成二进制的方法
12 ** ***0
6 ** **0
3 ** *1
1 ** 1
0 **

0000 1100

不停对原始数字做除以2保留整数部分操作得到一组数字,对每个数字做除以2取余操作得到一个数位的内容。把所有数位内容从后向前书写就得到转换结果。

负数十进制和二进制之间不能互相转换,必须借助相反数

转换过程是首先计算相反数,然后把结果进行转换,最后把转换结果再求相反数

把二进制中每个数位上的数字变成相反数字然后再加一就可以得到相反数的二进制

-14
14
0000 1110
1111 0001 + 1 = 1111 0010(-14的二进制)

有符号类型数字的二进制中最左边的数位叫符号位,可以根据符号位知道数字的符号。
如果符号位是0表示数字是非负数,如果符号位是1表示数字是负数。

1100 0101
0011 1010 + 1 = 0011 1011
59
-59

当把占地大的整数相关类型数字赋值给占地小的整数类型相关存储区的时候只能保留最后的二进制数位,这可能导致数据内容发生变化

把占地小的有符号整数相关类型数字赋值给占地大的有符号整数相关类型存储区的时候扩展出来的二进制数位里填充的都是符号位

0 0