目录
运算符优先级
#include <stdio.h>
int main()
{
//逗号运算符
//逗号运算符优先级最低,10先结合占位符
printf("%d\n",10, 20, 30); //10
//加上括号是一个整体,自左向右最后结果为30
printf("%d\n", (10, 20, 30)); //30
//其实运算符优先级很重要,但是写代码可读性在99%的情况下更重要
//代码虽然是给机器用的,可始终还是给人看的,尽可能的用()使运算顺序一目了然
//对于运算符优先级我也只是记住() [] . ->在第一梯队
//*优先级要高于&
//=只比,高
//! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
return 0;
}
本来想着在CSDN上随便找一个图贴上来,然后真就随便找了一个.
突然想带一句话,在这个充满信息的时代,如果没有分辨信息真伪的能力,还不如做一个瞎子!
当然我一点也不权威,我记录这些只是为了做笔记而已,发现错误我会改.如果能帮到其他人我很荣幸,如果我错了,对你产生了误导真的很抱歉.
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 | |
() | 圆括号 | (表达式)/函数名(形参表) | |||
. | 成员选择(对象) | 对象.成员名 | |||
-> | 成员选择(指针) | 对象指针->成员名 | |||
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
(类型) | 强制类型转换 | (数据类型)表达式 | |||
++ | 前置自增运算符 | ++变量名 | 单目运算符 | ||
++ | 后置自增运算符 | 变量名++ | 单目运算符 | ||
-- | 前置自减运算符 | --变量名 | 单目运算符 | ||
-- | 后置自减运算符 | 变量名-- | 单目运算符 [4] | ||
* | 取值运算符 | *指针变量 | 单目运算符 | ||
& | 取地址运算符 | &变量名 | 单目运算符 | ||
! | 逻辑非运算符 | !表达式 | 单目运算符 | ||
~ | 按位取反运算符 | ~表达式 | 单目运算符 | ||
sizeof | 长度运算符 | sizeof(表达式) | |||
3 | / | 除 | 表达式/表达式 | 左到右 | 双目运算符 |
* | 乘 | 表达式*表达式 | 双目运算符 | ||
% | 余数(取模) | 整型表达式/整型表达式 | 双目运算符 | ||
4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
- | 减 | 表达式-表达式 | 双目运算符 | ||
5 | 左移 | 变量 | 左到右 | 双目运算符 | |
>> | 右移 | 变量>>表达式 | 双目运算符 | ||
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | 双目运算符 | ||
小于 | 表达式 | 双目运算符 | |||
小于等于 | 表达式 | 双目运算符 | |||
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
!= | 不等于 | 表达式!= 表达式 | 双目运算符 | ||
8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
10 | | | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 | |
/= | 除后赋值 | 变量/=表达式 | |||
*= | 乘后赋值 | 变量*=表达式 | |||
%= | 取模后赋值 | 变量%=表达式 | |||
+= | 加后赋值 | 变量+=表达式 | |||
-= | 减后赋值 | 变量-=表达式 | |||
左移后赋值 | 变量 | ||||
>>= | 右移后赋值 | 变量>>=表达式 | |||
&= | 按位与后赋值 | 变量&=表达式 | |||
^= | 按位异或后赋值 | 变量^=表达式 | |||
|= | 按位或后赋值 | 变量|=表达式 | |||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | 从左向右顺序运算 |
if,if else,if else if else
#include <stdio.h>
int main()
{
//if语句
//当同时只需要一种结果时 if
int num = 3;
//哦!对了在C语言中一个=表示赋值,两个==表示逻辑,这个很重要,我刚学时也会在这里犯错
//现在也经常手误,写错,可以写成 0 == num % 2 这样写如果手误写成 0 = num % 2 编译器会不通过 因为不能给常量赋值
//条件不成立,会直接跳过这条语句,大括号很重要别看别人不写你也不写,代码的可读性在99%的情况下都是第一位
if (num % 2 == 0)
{
printf("num %% 2 == 0\n"); //不会执行
}
//当同时需要两种结果二选一的时候 if else
if (num % 2 == 0)
{
printf("num %% 2 == 0\n"); //不会执行
}
else
{
printf("num %% 2 != 0\n"); //会执行这条语句
}
//当同时需要多种结果多选一时 if else if else
int num2 = 5;
if (num2 % 3 == 0)
{
printf("num2 %% 3 == 0\n"); //不会执行
}
else if(num2 % 3 == 1)
{
printf("num2 %% 3 == 1\n"); //不会执行
}
else if (num2 % 3 == 2) //if可以不写,但是如果只有这三种情况下还是写上为好,还是那句话代码是给人看的
{
printf("num2 %% 3 == 2\n"); //会执行这条语句
}
//当不同时需要多种结果多选多时 if
//下面三条语句都会执行
int num3 = 6;
if (num3 % 3 == 0)
{
printf("num3 %% 3 == 0\n");
}
if (num3 % 2 == 0)
{
printf("num3 %% 2 == 0\n");
}
if ((num3 % 3 == 0) && (num3 % 2 == 0))
{
printf("num3 %% 3 == 0,num3 %% 2 == 0\n");
}
return 0;
}
switch
#include <stdio.h>
int main1()
{
//switch
//switch可以一选一 一选多 多选一 多选多
//switch的参数必须时整型或字符型(其实字符型也是整型,个人一直是这么认为的)
//不能是浮点型,字符串
int select = 0;
printf("enter select:");
scanf_s("%d", &select);
//一选一
switch (select)
{
//输入1执行case 1
case 1:
{ //这个大括号可加可不加,根据编译器决定,还是加上为好,少踩坑
printf("1\n");
//break必须加否会继续向下执行每条语句,直到遇到break或switch结束
//也就可以多选多一选多
break;
}
//输入2执行case 2
case 2:
{
printf("2\n");
break;
}
//输入3执行case 3
case 3:
{
printf("3\n");
break;
}
//其他输入执行default
default:
printf("other\n");
break;
}
return 0;
}
int main2()
{
int select = 0;
printf("enter select:");
scanf_s("%d", &select);
//一选多
switch (select)
{
//输入1执行case 1
case 1:
{
printf("1\n"); //此处没有break
}
//输入1执行case 2
case 2:
{
printf("2\n");
break;
}
//输入3执行case 3
case 3:
{
printf("3\n");
break;
}
//其他输入执行default
default:
printf("other\n");
break;
}
return 0;
}
int main()
{
char select = 0;
printf("enter select:");
scanf_s("%c", &select, 1);
//多选一 多选多
switch (select)
{
//输入a或A 执行printf("a,A\n");
case 'a':
case 'A':
{
printf("a,A\n");
break;
}
//输入cC执行printf("c,C\n");和printf("B,b\n");
case 'c':
case 'C':
{
printf("c,C\n");
}
case 'B':
case 'b':
{
printf("B,b\n");
break;
}
default:
printf("other\n");
break;
}
return 0;
}
for
#include <stdio.h>
int main(int argc,char * argv[])
{
//for 其实没啥可说的
/*for (初始条件;循环条件;循环步数)
* {
* 循环语句;
* }*/
//执行步骤
//初始条件->循环条件->循环语句->循环步数->循环条件->循环语句
//初始条件执行一次,然后判断循环条件符合执行循环语句,然后增加步数,判断循环条件.....
//那个术语不是这些,但是无关紧要.....
//前置++比后置++效率高,因为后置++会多执行指令(基本然并卵)
int sum = 0;
for (int i = 1; i <= 100; ++i)
{
sum += i;
}
printf("sum = %d\n", sum); //5050
//continue结束当前循环,执行下次循环
sum = 0;
for (int i = 1; i <= 100; ++i)
{
//如果i为1会结束当前循环执行下次循环,本次循环不会执行sum += i;
if (i == 1)
{
continue;
}
sum += i;
}
printf("sum = %d\n", sum); //5049
//break跳出循环
sum = 0;
for (int i = 0; i <= 100; ++i)
{
break; //直接跳出循环
sum += i;
}
printf("sum = %d\n", sum); //0
return 0;
}
while
#include <stdio.h>
int main(int argc,char * argv[])
{
//while
int sum = 0;
int i = 1;
//任何循环都要注意退出条件
//执行顺序就是自上向下
fly:while (i <= 100)
{
sum += i;
++i;
}
printf("sum = %d\n", sum);
//do while
//会先执行一次循环语句,在判断
i = 1;
do
{
printf("循环条件不满足,也会执行一次\n");
} while (i != 1);
//goto(不建议使用)
goto fly; //每次执行到这,就会跳转到fly位置,这个程序会死循环
return 0;
}
//还有一个需要说一下,十六进制输出的时候没有正负之分,他输出的是补码,也就是计算机存储的形式.