格式化输入输出
%nd 显示n个字符宽度,不够则补空格,右对齐
%-nd 显示n个字符宽度,不够则补空格,左对齐
%0nd 显示n个字符宽度,不够则补0,右对齐 (%-0nd不成立)
%n.mf 显示n个字符宽度,不够则补空格0(小数点算一位),m表示小数点后的位数(四舍五入),m的优先度大于n,
%g 不显示小数点后多余的0
运算符
自变运算符:++/-- 使变量的值自动+1/-1
前自变:++num --num 立即有效
后自变:num++ num-- 下一行语句生效
注意:不要再一行内多次使用自变运算符
#include <stdio.h>
int main(int argc,const char* argv[])
{
int num = 10;
printf("num=%d\n",num+++num);
printf("num=%d\n",num++);
}
算术运算符:+ - * / %
整数/整数 结果没有小数点(整除)
/ % 除数不能为0
printf("num=%d\n",num/0);
出现错误:浮点数例外(核心已转储)
关系运算法 > < >= <= == !=
比较的结果必须是0或1,比较结果还能继续参与运算
int num = -6;
if(1 < num < 10) 永远为真,运算规则与数学不一样
补充:使用关系运算符尽量将常量放在左边 ————>少写了=会报错,方便纠错
逻辑运算符 && || !
会先把运算对象转换成逻辑值,0会转换为逻辑假,非0转换真
A && B 一假即假 有一个是假就全都是假
A || B 一真即真 有一个是真就全都是真
!A 求反
&& || 具有短路特性:
当左边的运算对象已经能够确定整个表达式结果时,右边所有运算对象不再执行
例如:
int num = 10;
int num1 = 0;
(num1 != 0) && (num = 100);
printf("num = %d\n",num);
num 的值为10 ,"num = 100"没有执行
(num1 != 0) && (num = 100)
——————>
if(num1 != 0){
(num = 100);
} (同种效果不同写法)
三目运算符 运算对象有三个部分
A ? B : C
判断A的值是否为真,如果是则执行B,不是则执行C
该语句不能使用流程控制语句,因为它必须要有运算结果
赋值运算符 = +=
a += b; a = a+b;
a -= b; a = a-b;
a /= b; a = a/b;
a += b; a = a*b;
...
位运算符
& | ~ >> <<
sizeof 也是运算符,但是sizeof括号内的表达式不会计算
类型转换
自动类型转换:
只有相同类型的数据才能运算,不同类型的数据必须转换成相同的类型才能进行计算
转换规则:(以不丢失数据为基础,可以适当牺牲一些空间,保证数据不能丢失)
1、字节少的向字节多的转
2、有符号的向无符号的转
3、整型向浮点型转
强制类型转换:
(新类型)数据
有丢失数据的风险,要谨慎使用