- 赋值运算符
1.1-解释+区别
基本的赋值运算符是“=”。他的优先级别低于其他的运算符,所以对该运算符往往最后读取。
(区别:赋值“=” 和数学上的‘=’是不一样的 ;而与数学一样意义的符号在c中的体现是“==”(这个才是等于))
赋值:将某一数值赋给某个变量的过程,称为赋值。
int a;
a=12;
更多的
+= 加赋值
-= 减赋值
*= 乘赋值
/= 除赋值
%= 求余赋值
&= 按位与赋值
| = 按位或赋值
^= 按位异或赋值
<<= 左移位赋值
>>= 右移位赋值
来源:可以参考赋值运算符_百度百科 (baidu.com)
1.2-代码
#include <stdio.h>
int main()
{
int a = 7;
int c ;
c = a;
printf(" - = 运算符,c 的值 = %d\n", c );
c += a;
printf("+= 运算符,c 的值 = %d\n", c );
c -= a;
printf(" -= 运算符,c 的值 = %d\n", c );
c *= a;
printf(" *= 运算符,c 的值 = %d\n", c );
c /= a;
printf(" /= 运算符,c 的值 = %d\n", c );
c = 20;
c %= a;
printf(" %%= 运算符,c 的值 = %d\n", c );
c <<= 2;
printf("<<= 运算符,c 的值 = %d\n", c );
c >>= 2;
printf(”>>= 运算符,c 的值 = %d\n", c );
c &= 2;
printf(“”&= 运算符,c 的值 = %d\n", c );
c ^= 2;
printf(" ^= 运算符,c 的值 = %d\n", c );
c |= 2;
printf("|= 运算符,c 的值 = %d\n", c );
}
- 算术运算符
2.1-解释
算术运算符:即 算术 运算符号。
算术 运算 (arithmetic operators) 符号:就是用来处理 四则运算 的符号
2.2-例如
关注模运算‘%’
// 尤其是 (1)(3)就可以知道无论3是正数还是负数都不会影响
只要(1)(2)或者(2)(3)的对比 只有10的正负发生了变化才会影响结果;
所以当我们写的明知道是负数的时候,这除数的符号要不然就提取出来,要不然就像(4)一样
#include <stdio.h>
int main(){
printf("%d\n",10%3);//1
printf("%d\n",-10%3);//-1
printf("%d\n",10%-3);//1
printf("%d\n",-10%-3);//-1
}
自增、自减运算符
它的作用是在运算结束前(前置自增自减运算符)或后(后置自增自减运算符)将变量的值加(或减)一。
#include <stdio.h>
int main()
{
int c;//用c来论证a的变换
int a = 10;
c = a++;
printf("Line 1 - c 的值是 %d\n", c );
printf("Line 2 - a 的值是 %d\n", a );
a = 10;
c = a--;
printf("Line 3 - c 的值是 %d\n", c );
printf("Line 4 - a 的值是 %d\n", a );
a = 10;
c = ++a;
printf("Line 5 - c 的值是 %d\n", c );
printf("Line 6 - a 的值是 %d\n", a );
a = 10;
c = --a;
printf("Line 7 - c 的值是 %d\n", c );
printf("Line 8 - a 的值是 %d\n", a );
}
我们换需要注意的是下面的情况千万别写成a+++j 这样容易出歧义 最好加上括号
int i=7;
int j=5;
int a = i++;
int b = a+(++j);
printf("%d, %d\n", a, b);
2.3-举例子
#include <stdio.h>
int main(){
int a=7,b=4;
float c;
printf("%d\n",a+b);
printf("%d\n",a-b);
printf("%d\n",a/b);
printf("%d\n",a%b);
//求模运算 只取决于左边的数字
printf("%d\n",-a%b);
printf("%d\n",a++);
printf("%d\n",a);
printf("%d\n",++a);
c=(a+b);
printf("%f",c);
}
- 关系运算符
3.1-解释
关系运算符,有6种关系,分别为小于、大于、小于等于、大于等于、等于、不等于。
在c中的体现是“==”(这个才是等于)
3.2结果值
关系运算符的值只能是0或1。
关系运算符的值为真时,结果值都为1。
关系运算符的值为假时,结果值都为0。
#include<stdio.h>
int main(){
int a=12,b=11;
printf("%d\n",a>b);//1
printf("%d",a<b);//0
}
我们换需要注意的是<= or>=那个前 那个后一定是确定的 不能乱来。
3.3-注意事项
(1)前4种关系运算符的优先级别相同,后两种也相同。前四种高于后两种。
(3)关系运算符的优先级高于赋值运算符。
- 逻辑运算符
4.1-代码
/*
&&是且关系1&&1 是 对
|| 是或者关系仅仅0&&0是 错
*/
#include<stdio.h>
int main(){
int a,b;
scanf("%d%d",&a,&b);
if((a>1)&&(b<18))
{
printf("ok");
}
else{
printf("no");
}
}
4.2-注意
用&&的时候我们可以表示应该区间的范围
但是千万不能写成1<=x<=10这种是有歧义的,计算机是一步接着一步的,我们先判断x是不是在1《=x这个里面的在和右面的,这样容易(是容易出问题)
- 强制转换/逗号
这个没多少讲的了
逗号运算符取最右边的 参考(32条消息) 逗号运算符与表达式-运算符与表达式-CSDNC技能树
5.1-举例
#include <stdio.h>
int main(){
//05强制转换
double d=3.14;
int a=(int)d;
//不改变d 这个浮点值
//%.nf 表示保留n为小数
//%n。f 有2个位置且不留小数
printf("%.2f\n%d\n",d,a);
//06逗号运算符
//取得()中最 右边的数字
int c=(2,3,4,5,1);
printf("%d\n",c);
return 0;
}
5.2-强制类型转换(隐式自动类型转换)
当操作数的类型不同,而且不属于基本数据类型时,经常需要将操作数转化为所需要的类型,这个过程即为强制类型转换。强制类型转换具有两种形式:显式强制转换和隐式强制类型转换。
举个例子,求素数的这个需要用到《math.h》
#include <stdio.h>
#include <math.h>
int main(){
//i=a*b 那么a和b里至少有一个数字<=开平方i
//sqrt--开平方的数学库函数
int i=0,count=0;
for(i=101;i<=200;i+=2){
int j=0;
for(j=2;j<=(int)sqrt(i);j++){
if(i%j==0){
break;
}
}
if(j>sqrt(i)){
count++;
printf("%d\n",i);
}
}
printf("%d个·",count);
}
那么就需要介绍一下sqrt了
SQRT
函数原型
doublesqrt(doublex);
参数
x -- 浮点值。
返回值
该函数返回 x 的平方根。
- 位运算符
6.1-用法
6.2-注意
'^'在计算机里并不是数学中的幂次 是异或
这个最好的方式就是知道1~10里少一个数的这种问题
解决:1~10遍历^在和缺失数的1~10整体异或
左移、右移是方便二进制
左移可以方便计算:方便2倍
右移方便知道 数x的二进制的1 与0 的个数(需要while一下)
6.3-看例子
- 三目运算符
7.1-闰年求解
#include <stdio.h>
int main(){
int year;
for(year=1000;year<=2000;year++){
//能被4整除并且不能被100整除
//能被400整除的是闰年
if(year%4==0&&year%100==0){
printf("%d",year);
}else if(year%400==0){
printf("%d",year);
}
}
}
7.2-三目运算符(本质上是if…else)
#include<stdio.h>
int main(){
int year;
scanf("%d",&year);
//是真的返回1
//不是 返回0
year=(year%100==0)?(year%400==0?1:0):(year%4==0?1:0);
printf("%d",year);
if(year){
printf("是闰年");
}
else if(!year){
printf("不是闰年");
}
}
&和*
用于指针
int* ptr;
printf("%p",&a);
可以看我的https://blog.csdn.net/m0_74154295/article/details/128746052里面写了指针的数据类型占的大小4/8字节
- 优先级
参考技能树(32条消息) 运算符优先级与求值顺序-运算符与表达式-CSDNC技能树
菜鸟教程的实例
#include <stdio.h>
main()
{
int a = 20;
int b = 10;
int c = 15;
int d = 5;
int e;
e = (a + b) * c / d; // ( 30 * 15 ) / 5
printf("(a + b) * c / d 的值是 %d\n", e );
e = ((a + b) * c) / d; // (30 * 15 ) / 5
printf("((a + b) * c) / d 的值是 %d\n" , e );
e = (a + b) * (c / d); // (30) * (15/5)
printf("(a + b) * (c / d) 的值是 %d\n", e );
e = a + (b * c) / d; // 20 + (150/5)
printf("a + (b * c) / d 的值是 %d\n" , e );
return 0;
}
(a + b) * c / d 的值是 90
((a + b) * c) / d 的值是 90
(a + b) * (c / d) 的值是 90
a + (b * c) / d 的值是 50