1.数据类型
图中有*的是C99所增加的。
2.数据类型及其转换说明和字节数
类型 |
转换说明 |
字节数 |
int |
%d |
2 |
4 |
||
unsigned int |
%u |
2 |
4 |
||
short |
%d |
2 |
unsigned short |
%u |
2 |
long |
%ld / %Ld |
4 |
unsigned long |
%lu / %Lu |
4 |
long long |
%lld / %LLd |
8 |
unsigned long long |
%llu / %LLu |
8 |
signed char |
%c |
1 |
unsigned char |
%c |
1 |
float |
%f |
4 |
double |
%f |
8 |
long double |
%lf / %Lf |
8 |
16 |
注意:
C编译器系统把浮点数常量都按双精度处理,分配8个字节。
例如:
float a = 3.14159;//(在VC++编译器中会发出警告)
所以,可以在常量的末尾加专用字符,强制指定常量的类型。
例如:
float a = 3.14159f;
3.运算符
基本运算符 |
名称 |
说明 |
= |
赋值运算符 |
int number; number = 2018; 赋值行为从右往左进行 |
+ |
加号运算符 二元运算符 |
int a; a = 4 + 6; |
- |
减号运算符 二元运算符 |
int number; number = 20 – 5; |
-和+ |
符号运算符 一元运算符 |
int rocky; rocky = -12; |
* |
乘法运算符 二元运算符 |
int a; a = 3*4; |
/ |
除法运算符 二元运算符 |
float a; a = 6.0/4.0; a得 1.000000 其结果a = 1,小数部分被丢弃(截断) 11 / 5 = 2; 11 / -5 = -2; -11 / -5 = 2; -11 / 5 = -2; 11 / 5.0 = 2.2; 总结:只要有一个不是整数,得出的小数结果就不会被截掉,反之,都是整数,小数部分就不会被截掉 |
% |
求模运算符 二元运算符 |
只适用于整数,不适用于浮点数 12 % 5 = 2 结果为左侧的整数除以右侧的整数的余数 |
++ |
递增运算符 |
见下面代码举例 |
-- |
递减运算符 |
注: 只需一个运算对象的运算符(如负号和sizeof)称为一元运算符;
两个运算对象的运算符(如加法运算符和乘法运算符)称为二元运算符。
(1).
很明显在表达式语句a_post = a++中先将a的值赋给了a_post,之后a才自增1,
第二个表达式语句就不再缀述了。
(2).
不知道大家知不知道这两者的差别及其原因,知道的可以略过
其实很简单:
第一个while循环中的a++ < 9 ,a先和9比较后再自增,所以到a = 8时继续执行循环,然后a自增1打印出9。
第二个while循环中的++a < 9, a先自增再和9比较大小。
在这里说明一下尽量不要写像这样的表达式语句a = a++或者 b = n++ + n++,这样的表达式语句很容易理解错误,所以建议不要这样写代码,可读性不强。但不要将上面的while循环写成下面的这种形式:
while(a < 9)
{
Printf(“%d ”, a);
a = a + 1;
}
这样写虽然容易理解,但可能有人会怀疑你不是真正的C程序员。
(哈哈哈哈哈哈,make a joke!)
运算符的优先级(从高至低)
运算符 |
结合律 |
() |
从左行右 |
+ - (一元) |
从右行左 |
*和/ |
从左行右 |
+ - (二元) |
从左行右 |
= |
从右行左 |
其实这个不需要死记,跟我们的加减乘除的运算规则是一样的!