昨天由于时间关系,并未学习完数据类型,今天的学习便紧接昨天的末尾。具体内容如下
一、数据类型后半部分
1.字符串常量
字符串常量由一个或多个字符组成,用双引号括起
例如:“a” “Hello world!”
字符串常量的末尾都有一个看不见的“\0”字符用来标识字符串结尾,在计算一串字符串所占内存空间大小时需将其一并计算。
如:字符串常量“a”所占内存空间为2个字节
2.标识常量
#define N 5
在之后的编程中, N 便代表着常量 5 。
“#define”是标识常量的一种,又称宏定义。
在一段程序中,很可能出现某个数值被频繁的使用,那么我们就可以通过某个符号将其表示。
宏定义是一种编译预处理命令,句尾不需要分号;又因为其特性,如果存在语法错误,即使不能起到想要的结果,系统也不会报错。
宏定义的好处是修改数值方便,并且会使代码的可读性提高。
3.显示类型转换(强制类型转换)
通过在数据前添加数据类型前缀,可以在该次数据使用时强制将其转换为前缀类型的数据。
(int)3.14;
(int)2.7;
(double)50;
int Num1;
(double)Num
这种数据转换仅在此次转换中有效,下次再调用这个数据时,还会保持那个数据本身的类型。
4.隐式类型转换
变当几个数据类型不同的数值运算或处理时,系统会自动将数值转换为同一类型,然后再进行运算或处理。
转换过程存在一定的规则:
1.所有浮点运算均以double进行,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。
2.short、char类型进行数据运算和数据处理时会转换为int类型
3.转换按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。若两种类型的字节数不同,转换成字节数高的类型;若两种类型的字节数相同,且一种有符号,一种无符号,则转换成无符号类型。
4.浮点数和整形数运算时,会将整形数转换为浮点数再运算。
二、运算符
1.算数运算符
+ , - , * , / , ++ , -- , %
这些是基础的运算符。
特别的,%不能对浮点数操作,/ 不能除以0.
在计算时,如果有++ 或--,需要优先计算。
2.赋值运算符
= , += , -= , *= , /= , %=
左值:允许放在赋值运算符左边的值
变量
常量、表达式均不能作为左值
右值:允许放在赋值运算符右边的值
常量、变量、常量变量组成的表达式
赋值运算时如果赋值号两边量的数据类型不同,赋值号右边量的类型将转换为左边量的类型。
当赋值号右边数据所占空间小,二左边数值所占空间大,赋值前会将右边的数值进行拓展,拓展过程遵循以下原则:有符号数高位补符号位,无符号数高位补0.
当赋值号右边数据所占空间大,左边数值所占空间小,赋值前会直接截取数据低位放入小空间
3.三目运算符(特殊运算符)
a? b : c
运算逻辑是:判断a是否为真,若为真则输出b,否则输出c。
这个三目运算符进行运算时有右结合性,从右往左计算
例:x > y ? x : y > z ? y : z
这里先计算后面y>z?y:z的部分
4.逗号运算符
从左到右依次执行表达式,并将最后一个逗号表达式的结果作为整体逗号表达式的结果
5.sizeof运算符
sizeof (数据类型/变量名) 获得数据类型/变量在内存中所占的字节数
三、常用函数前半部分
1.putchar
使用示例:putchar(‘a’);
或
char ch = ‘A’;
putchar(ch);
putchar可以在终端打印一个字符
putchar只能打印字符,同时只能打印一个字符
2.getchar
使用示例:
char ch;
ch=getchar();
getchar可以从终端接收一个字符
getchar会将程序阻塞,直到用户输入数据,程序才能继续向下执行
与putchar相似,getchar只能接收字符,且只能接收一个字符