C语言
一门编程语言的涉足总会有磕磕碰碰的地方,这篇博客的制作全是依照我的感觉来写,所以可能会有疏漏,忘见谅。
1.printf格式字符:
打印格式 |
对应数据类型 |
含义 |
%d |
int |
接受整数值并将它表示为有符号的十进制整数 |
%hd |
short int |
短整数 |
%hu |
unsigned short |
无符号短整数 |
%o |
unsigned int |
无符号8进制整数 |
%u |
unsigned int |
无符号10进制整数 |
%x,%X |
unsigned int |
无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF |
%f |
float |
单精度浮点数 |
%lf |
double |
双精度浮点数 |
%e,%E |
double |
科学计数法表示的数,此处"e"的大小写代表在输出时用的"e"的大小写 |
%c |
char |
字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 |
%s |
char * |
字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符) |
%p |
void * |
以16进制形式输出指针 |
%% |
% |
输出一个百分号 |
printf附加格式:
字符 |
含义 |
l(字母l) |
附加在d,u,x,o前面,表示长整数 |
- |
左对齐 |
m(代表一个整数) |
数据最小宽度 |
0(数字0) |
将输出的前面补上0直到占满指定列宽为止不可以搭配使用- |
m.n(代表一个整数) |
m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度,用于说明输出的实型数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。 |
2.自增自减运算符(++) (--)
1.a++
加加在后: 先计算表达式的结果再计算变量的值
#include<stdio.h> int main(){ int a = 10; int b = 20; //检测自增运算过程 int c = b * a++; //先计算表达式(b * a++)的值后再进行变量a的计算 printf("c = %d\n",c);//结果为200 printf("a = %d\n",a);//结果为11 }
2.++a
加加在前:先计算变量的值再进行表达式计算
#include<stdio.h> int main(){ int a = 10; int b = 20; //检测自增运算过程 int c = b * ++a; //先计算++a的值再计算表达式(b * ++a)的值 printf("c = %d\n",c);//结果220 printf("a = %d\n",a);//11 }
注:自减运算符与自增运算符计算过程一致
3. 运算符的优先级
优先级 |
运算符 |
名称或含义 |
使用形式 |
结合方向 |
说明 |
1 |
[] |
数组下标 |
数组名[常量表达式] |
左到右 |
-- |
() |
圆括号 |
(表达式)/函数名(形参表) |
-- | ||
. |
成员选择(对象) |
对象.成员名 |
-- | ||
-> |
成员选择(指针) |
对象指针->成员名 |
-- | ||
| |||||
2 |
- |
负号运算符 |
-表达式 |
右到左 |
单目运算符 |
~ |
按位取反运算符 |
~表达式 | |||
++ |
自增运算符 |
++变量名/变量名++ | |||
-- |
自减运算符 |
--变量名/变量名-- | |||
* |
取值运算符 |
*指针变量 | |||
& |
取地址运算符 |
&变量名 | |||
! |
逻辑非运算符 |
!表达式 | |||
(类型) |
强制类型转换 |
(数据类型)表达式 |
-- | ||
sizeof |
长度运算符 |
sizeof(表达式) |
-- | ||
| |||||
3 |
/ |
除 |
表达式/表达式 |
左到右 |
双目运算符 |
* |
乘 |
表达式*表达式 | |||
% |
余数(取模) |
整型表达式%整型表达式 | |||
4 |
+ |
加 |
表达式+表达式 |
左到右 |
双目运算符 |
- |
减 |
表达式-表达式 | |||
5 |
<< |
左移 |
变量<<表达式 |
左到右 |
双目运算符 |
>> |
右移 |
变量>>表达式 | |||
| |||||
6 |
> |
大于 |
表达式>表达式 |
左到右 |
双目运算符 |
>= |
大于等于 |
表达式>=表达式 | |||
< |
小于 |
表达式<表达式 | |||
<= |
小于等于 |
表达式<=表达式 | |||
7 |
== |
等于 |
表达式==表达式 |
左到右 |
双目运算符 |
!= |
不等于 |
表达式!= 表达式 | |||
| |||||
8 |
& |
按位与 |
表达式&表达式 |
左到右 |
双目运算符 |
9 |
^ |
按位异或 |
表达式^表达式 |
左到右 |
双目运算符 |
10 |
| |
按位或 |
表达式|表达式 |
左到右 |
双目运算符 |
11 |
&& |
逻辑与 |
表达式&&表达式 |
左到右 |
双目运算符 |
12 |
|| |
逻辑或 |
表达式||表达式 |
左到右 |
双目运算符 |
| |||||
13 |
?: |
条件运算符 |
表达式1? 表达式2: 表达式3 |
右到左 |
三目运算符 |
| |||||
14 |
= |
赋值运算符 |
变量=表达式 |
右到左 |
-- |
/= |
除后赋值 |
变量/=表达式 |
-- | ||
*= |
乘后赋值 |
变量*=表达式 |
-- | ||
%= |
取模后赋值 |
变量%=表达式 |
-- | ||
+= |
加后赋值 |
变量+=表达式 |
-- | ||
-= |
减后赋值 |
变量-=表达式 |
-- | ||
<<= |
左移后赋值 |
变量<<=表达式 |
-- | ||
>>= |
右移后赋值 |
变量>>=表达式 |
-- | ||
&= |
按位与后赋值 |
变量&=表达式 |
-- | ||
^= |
按位异或后赋值 |
变量^=表达式 |
-- | ||
|= |
按位或后赋值 |
变量|=表达式 |
-- | ||
| |||||
15 |
, |
逗号运算符 |
表达式,表达式,… |
左到右 |
-- |
4.类型转换
隐式转换
编译器会自动将低的数据类型转成高的数据类型,转换后数据正确
#include <stdio.h>
int main()
{
int num = 5;
printf("s1=%d\n", num / 2);
printf("s2=%lf\n", num / 2.0);
return 0;
}
强制转换
需要程序根据实际用途去转换,得到的结果可能会省略部分的值
#include <stdio.h>
int main()
{
float x = 0;
int i = 0;
x = 3.6f;
i = x; //x为实型, i为整型,直接赋值会有警告
i = (int)x; //使用强制类型转换
printf("x=%f, i=%d\n", x, i);
return 0;
}
类型转换的原则:
占用内存字节数少(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。