第三章
一、零碎知识
1、输出一闪而过用getchar()
2、float:
Printf:%f、%.2f(表示精确到小数点后两位,同理%.3表示后三位)
3、scanf:
&:取地址符号,找到变量的地点
表达式:scanf(“%f/d”,&…(声明的变量))
4、常量与变量
常量:程序使用前预先设定好了
变量:可能会改变或被赋值
5、位,字节和字:一字节等于八位
A、都用于描述计算机数据单元或存储单元(主要指存储单元)
B、最小存储单元是位(bit),存储0、1
是计算机内存的基本构建块
C、字节可表示0-255的整数或一组字符
D、字是设计计算机时给定的自然存储单位
计算机字长越大,其数据转移越快,允许的内存访问也越多
6、整数与浮点数
A、储存方式不同:
整数:就是整数(感觉在搞笑)
若一个数不需要八位以0补齐八位,从右起第一个数的位置叫
第零位,以此类推,第八个数叫第七位
浮点数(有小数部分,“.00”也算):分成小数部分和指数部分存储
B、有无小数部分
C、浮点数损失的精度更多(某些算术运算)
a、单精度:(float)
有效六位(指全部位,从左算起)
例如:3.1415926从左起只有3.14159六位准确,后面有可能对(运气)
b、双精度:(double)
有效位十位(同上)
D、浮点数通常是实际值的近似值(理由看C)
E、浮点运算比整数慢
二、基本数据类型(掌握printf()函数)
1、int类型:
A、认识int类型
a、有符号
b、整数:正整数、0、负数都可
c、一般储存一个int占一个机器字长(看计算机几位,早期16位,目前32位)
d、ISOC规定int的取值范围最小为-32768~32767
(为什么是这两个数字呢?首先要知道原码、反码、补码,具体不详细说明)
e、系统用一个特殊位的值表示有符号整数的正负号(0位正,1位负,放首位)
B、声明int变量
a、声明为变量创建和标记存储空间,并为其指定初始值
b、格式:int 变量名;(多个最好转行,养成良好风格)
int 变量名1,变量名2;(若写在一行用逗号分隔)
C、变量获值
a、赋值:将右边的数值给左边的变量
为变量赋一个初始值(初始化变量)若在声明时赋值注意
不要出现int a,b=10的写法(可能出现下面情况)
b、通过函数(如scanf())获值
D、int类型常量:大多数整数(非常大除外)
2、其他整数类型
A、short int类型:
a、存储空间可能比int小
b、常用于较小数值(节省空间)
c、有符号
d、16位(一般)
B、long int类型:
a、存储空间可能比int多
b、适用于较大数值
c、有符号
d、32位(一般)
e、在值的末尾加l(小写的L)或L则较小的常量也可以按long类
型存储(一些c标准函数要求使用long类型的值)
C、long long int类型:
a、存储空间可能比long多
b、适用于更大数值
c、至少占64位
d、有符号
e、在值的末尾加ll((小写L)或LL则可以按longlong类型存储
D、unsigned int类型:
a、与有符号类型表示的范围不同
b、只用于非负值的场合
c、可表示更大的数(因为原用于表示负数的部分用于表示正数)
d、常用于计数
E、C90新增:unsigned long int、unsigned short,其中有u或U后缀表示unsigned
F、在任何有符号类型前面添加关键字signed强调使用有符号类型的意图
G、每种类型都有适用情况,考虑:运算速度、程序移植到不同位机、存储空间等
因素
H、声明与int同
3、printf()函数:
A、%d:占位符,称为转换说明,指明打印整数的位置,要与打印值类型匹配
B、八进制和十六进制
a、0x或0X前缀表示十六进制
b、0前缀表示八进制
c、十进制:%d
八进制:%o
十六进制:%x
d、显示各进制前缀0、0x、0X:在%后面加#,例如%#o等
e、十进制、八进制和十六进制在计算机内都是二进制存储,所以即使
赋值是以十进制的形式,也可以以八进制打印
C、打印:
a、int:%d、%o、%x
b、short:%hd、%ho、%hx
c、long:%ld、%lo、%lx
d、longlong:%lld、%llo…
e、unsigned:%u(unsigned int)
h或l都可以与u一起用:如%lu
f、char:%c
g、float:%f、%e(以指数记数法表示)
h、double:%lf、%le
i、long double:%llf、%lle
4、整数溢出:
A、原码:直接正负数转换成二进制
如+1的二进制00000001,-1的二进制10000001
反码:按位取反
如10000001按位取反(符号位不变)11111110
补码:在反码基础上加一
如11111110+1=11111111
所以-1在计算机中以11111111存储
B、当整数超出类型的取值范围,有可能会从起始点开始(不一定),所以若将一个
无符号数以有符号数形式打印可能打印值不同(无符号数较小除外)
如long类型,从0开始到最大2147483647,当整数超过它,就会从-2147483648
开始继续往上增加
5、char类型
A、认识char类型
a、存储整数(实质)存储字符(表面)
b、字符:字母、标点符号、空格等
c、标准ASCll码的范围是0~127,只需要7位二进制数即可表示
d、char类型通常被定义位8位的存储单位:
有符号:-128~127
无符号:0~255
用signed强调有无符号
e、ISO/IEC 10646标准
f、c语言把1字节定义为char类型占用的位(bit)数
B、声明char与int同
C、字符常量和初始化
a、用单引号括起要赋给变量的单个字符(一定是单个(除非是转义字符\~,
多个只会显示最后一个)且是单引号,因为双引号括字符串)
b、也可以用数字代码赋值((不用单引号)风格不好)
D、非打印字符
a、可以用数字或’转义序列’
b、要用八进制ASCll码表示一个字符可以在编码值前面加一个\并用’’括起来
如’\007’,十六进制’\x加数字’
6、浮点类型:
A、可表示包括小数在内更大范围的数
B、指数记数法:10000000=1.0e7(类似科学记数法,e后面的数代表10的指数)
C、float:
a、至少能表示6位有效数字,(全部六位,不是小数点后六位)
b、系统存储一个浮点数要占用32位。其中8位用于表示指数的值和符号,
剩下24位用于表示非指数部分(尾数或有效数)(具体可查IEEE754)
D、double:
a、至少10位
b、占64位
E、long double:至少与double的精度相同
F、书写形式:
a、可无正号
b、可省略小数点或指数部分,不能同时省略两者
c、可省略小数部分或整数部分,不能同时省略两者
d、不要在浮点型常量中间加空格:1.56 e12,应是1.56e12
e、浮点数后面加f或F后缀系统会将浮点型常量看作float类型
加l或L则视为long double类型,没有后缀是double类型
G、打印(看上面)
H、浮点值的上溢和下溢
a、上溢:计算导致数字过大,超过当前类型能表达的范围,给变量
(例子中的toobig)赋一个无穷大的特定值,用inf或infinity表示
b、下溢:是指由于数值太小,低于当前类型所能表示的最小的值,计算机
就只好把尾数位向右移,空出第一个二进制位,但是与此同时,却损失了
原来末尾有效位上面的数字
c、NaN:(not a number)未定义时printf显示nan
7、类型大小
A、sizeof
a、以字节为单位给出指定类型的大小
b、用%zd(C11和C99标准)或%u、%lu(非前者标准)