算数运算符
算数运算符介绍
符号 | 说明 |
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 取余 |
#include<stdio.h>
int main()
{
// + - *
//数字直接计算
printf("%d \n" , 2 +3);
printf("%d \n", 2 - 3);
printf("%d \n", 2 *3);
printf("%.2lf \n", 2.6 + 5.6);
printf("%.2lf \n", 2.6 - 5.6);
printf("%.2lf \n", 2.6 * 5.6);
//+ - *
//变量进行计算
int a = 3;
int b = 6;
printf("%d \n", a+b);
printf("%d \n", a-b);
printf("%d \n", a*b);
//除法(/)
printf("%d \n" , 10/2); //5
//取余(%)
printf("%d \n", 10 % 2); //0
//通用细节:
//1.整数计算,结果一定是个整数
printf("%d \n", 10 /3); //3 ☆只留下整数部分
//2.小数计算,结果一定是个小数
printf("%.2lf \n", 10.0+3.0); //13.00
//3.整数和小数计算,结果一定是个小数
printf("%.2lf \n", 10 / 3.0); //3.33
//4.小数直接参与计算,结果有可能不精确
printf("%.2lf \n", 10.333333 + 3.33333); //13.67
//除法的细节:
//1.不能除以0
//取余的细节:
//1.运算的数据必须全是整数
//2.获取余数的正负,是跟第一个数字保持一致的
printf("%d \n",10 % 3); // 1
printf("%d \n", -10 % 3); // -1
printf("%d \n", 10 % -3); // 1
//3.不能除以0
}
#include<stdio.h>
int main()
{
/*
* exercise
* 键盘录入一个三位数
* 将其拆分为个位、十位、百位后
* 打印在控制台
*/
printf("请输入一个三位整数:");
int number;
scanf("%d",&number);
printf("个位是:%d \n",number%10);
printf("十位是:%d \n", (number % 100) / 10);
printf("百位是:%d \n", number / 100);
}
+的两种情况:1.数字相加
计算时,数据类型不一样不能直接运算,需要转成一样的,才能运算
double>float>long long>long>int>short>char
隐式转换:把一个取值范围小的,转成取值范围大的
short b = 10;
int a = b;
规则1:取值范围小的,和取值范围大的计算,小的会自动提升为大的,再进行运算
规则2:short char类型的数据在运算的时候,先提升为int ,再进行运算
不同的数据类型进行计算、赋值等操作,会触发隐式转换
强制转换:把一个取值范围大的,赋值给取值范围小的
格式:目标数据类型 变量名 = (目标数据类型)被强转的数据;
int b = 10;
short i = (short) b;
大的赋值给小的,需要强制转换。
弊端:有可能导致数据错误
+的两种情况:2.字符相加
short char类型的数据在运算的时候,先提升为int ,再进行运算
char类型转换为int类型 查询ASCII码表,每一个字符有一个唯一相对应的值
#include<stdio.h>
int main()
{
//字符转数字
// 'a' 'A' '0'
printf("%d \n" , 'a'); //97
printf("%d \n", 'A'); //65
printf("%d \n", '0'); //48
}
自增自减运算符
符号 | 说明 |
++ | 变量中的值+1 |
-- | 变量中的值-1 |
++和--既可以放在变量的前边,也可以放在变量的后边
++或者--放在变量的前边或后边,单独写一行结果是一样的
int a = 10;
a++;
++a;
a--;
--a;
printf("%d \n",a); //10
int a = 10;
int b = a++; //先用后加 b = 10
int a = 10;
int b = ++a; //先加后用 b = 11
赋值运算符
符号 | 说明 | 举例 |
= | 直接赋值 | int a = 10,将10赋值给a |
+= | 加后赋值 | a += b,将a + b的值赋值给a |
-= | 减后赋值 | a -= b,将a - b的值赋值给a |
*= | 乘后赋值 | a *= b,将a * b的值赋值给a |
/= | 除后赋值 | a /= b,将a / b的值赋值给a |
%= | 取余赋值 | a %= b,将a % b的值赋值给a |
#include<stdio.h>
int main()
{
// +=
int a = 10;
int b = 20;
a += b;
printf("%d \n" ,a); //30
printf("%d \n", b); //20
}
关系运算符(比较运算符)
符号 | 说明 | 结果 |
== | a == b 判断a 是否等于b | 成立1(真)不成立0(假) |
!= | a != b 判断a 是否不等于b | 成立1(真)不成立0(假) |
> | a > b 判断a 是否大于b | 成立1(真)不成立0(假) |
>= | a >= b 判断a 是否大于等于b | 成立1(真)不成立0(假) |
< | a < b 判断a 是否小于b | 成立1(真)不成立0(假) |
<= | a <= b 判断a 是否小于等于b | 成立1(真)不成立0(假) |
逻辑运算符
符号 | 作用 | 说明 |
&& | 与(而且) | 两边都是真,结果才是真(同时满足) |
|| | 或(或者) | 两边都是假,结果才是假(满足其一即可) |
! | 非(取反) | 取反 |
#include<stdio.h>
int main()
{
// 1:成立 0:不成立
printf("%d \n" , 1 && 1); //1
printf("%d \n", 1 && 0); //0
printf("%d \n", 0 && 0); //0
printf("---------------------------\n");
printf("%d \n", 1 || 1); //1
printf("%d \n", 1 || 0); //1
printf("%d \n", 0 || 0); //0
printf("---------------------------\n");
printf("%d \n", ! 1); //0
printf("%d \n", ! 0); //1
printf("---------------------------\n");
}
#include<stdio.h>
int main()
{
/*
* 键盘录入一个两位整数,要求该数字不能包含7
* 如果符合要求 输出1 如果不符合要求 输出0
*/
int num;
printf("请输入一个二位整数:");
scanf("%d",&num);
int result = (num / 10 != 7) && (num%10 !=7);
printf("%d \n",result);
/*
* 键盘录入一个两位整数,要求该数字不能包含7 而且不能是七的倍数
* 如果符合要求 输出1 如果不符合要求 输出0
*/
int num2;
printf("请输入一个二位整数:");
scanf("%d", &num2);
int result2 = (num2 / 10 != 7) && (num2 % 10 != 7) && num2 % 7 != 0;
printf("%d \n", result2);
}
扩展:当左边的表达式能确定整个表达式的结果了,右边不参与运算(逻辑运算符的短路效果)
int a = 1,b = 5;
a>0 && ++b;
printf("a=%d,b=%d \n",a,b); // a=1 b=6 //左边为1 右边继续执行
int a = 1,b = 5;
a>10 && ++b;
printf("a=%d,b=%d \n",a,b); // a=1 b=5 //左边为0 右边不再计算
三元运算符
格式:关系表达式 ? 表达式1 : 表达式2 ; //成立运行表达式1 不成立运行表达式2
#include<stdio.h>
int main()
{
//获取两个变量中的较大值
int a = 10;
int b = 20;
int c = a > b ? a : b;
printf("%d \n",c);
//获取三个变量中的最大值
int a1 = 10;
int b1 = 30;
int c1 = 20;
int d1 = (a1 > b1 ? a1 : b1) > c1 ? (a1 > b1 ? a1 : b1) : c1;
printf("%d \n", d1);
}
逗号运算符(分隔符)
规则:
1.从左往右
2.最后一个子表达式的结果,是整个表达式的结果
3.优先级最低