目录
引言
C语言是非常灵活的:因为C语言提供了非常丰富的操作符,所以使得使用起来就比较灵活。
算术操作符
+ - * / %
#include <stdio.h>
int main()
{
int a = 4 + 2;//相加
int b = 4 - 2;//相减
int c = 4 * 2;//相乘
int d = 4 / 2;//相除
int e = 4 % 2;//取模
printf("%d\n", a);//6
printf("%d\n", b);//2
printf("%d\n", c);//8
printf("%d\n", d);//2
printf("%d\n", e);//0
return 0;
}
注意:
- 除号的两端都是整数的时候,执行的是整数除法,如果两端只要有一个浮点数就执行浮点数的除法
- 取模操作符的两个操作数只能是整数
#include <stdio.h>
int main()
{
//取余
int a = 5 / 2;
float b = 5.0 / 2;
printf("%d\n", a);//2
printf("%.2f\n", b);//2.50 .2f:保留小数点后多少位
//取模
int c = 5 % 2;
printf("%d\n", c);//1
return 0;
}
移位操作符
>> << (涉及2进制的计算,后面再介绍)
位操作符
& ^ | (后面再介绍)
赋值操作符
= += /= -= *=
&= ^= |= >>= <<= (下面一组后面再介绍)
//赋值运算符:= += -= *= /=
#include <stdio.h>
int main()
{
int a = 0;//初始化
a = 4;//赋值
printf("%d\n", a);//4
a += 2;//a=a+2;
printf("%d\n", a);//6
a -= 2;//a=-2;
printf("%d\n", a);//4
a *= 2;//a=a*2;
printf("%d\n", a);//8
a /= 2;//a=a/2;
printf("%d\n", a);//4
return 0;
}
大家可以根据上面的例子进行练习,看a到每个阶段的值等于多少
单目操作符
单目操作符 | |
---|---|
! | 逻辑反操作 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
-- | 前置、后置-- |
++ | 前置、后置++ |
* | 间接访问操作符(了解引用操作符) |
(类型) | 强制类型转换 |
!:逻辑反操作
注:在C语言中,0表示假,非0表示真
//单目操作符:只有一个操作数的操作符
//!:逻辑反操作
//在C语言中,0表示假,非0表示真
#include <stdio.h>
int main()
{
int flag = 0;
if (!flag)
{
printf("hello\n");
}
return 0;
}
读者可以根据上述代码试验一下,当flag=0时,!flag为真,会输出hello,当flag=2时,!flag为假,不会输出值。
- :负值
//-:负值
#include <stdio.h>
int main()
{
int a = -2;
int b = -a;//b=-(-2)
printf("%d\n", b);//2
return 0;
}
+ :正值
//+:正值
#include <stdio.h>
int main()
{
int a = -2;
int b = +a;//b=a
printf("%d\n", b);//-2
return 0;
}
&:取地址(后面讲)
sizeof:操作数的类型长度
(注:sizeof是单目操作符,不是函数,以字节为单位)
//sizeof:操作数的类型长度,以字节为单位
#include <stdio.h>
int main()
{
int a = 2;
printf("%d\n", sizeof(a));//4
printf("%d\n", sizeof(int));//4:sizeof后既可跟变量名,又可跟数据类型
printf("%d\n", sizeof a);//4:sizeof后跟变量名可把括号省略,但若是数据类型,则不支持省略括号
int arr[10] = { 0 };
printf("%d\n", sizeof(arr));//40:计算的是整个数组的大小,数组为整型数组,每个元素占4个字节
printf("%d\n", sizeof(arr[0]));//4:数组的第一个元素大小
printf("%d\n", sizeof(arr) / sizeof(arr[0]));//10:数组的元素个数
return 0;
}
~ :对一个数的二进制按位取反(后面讲)
-- :前置、后置--
//--:前置、后置--
#include <stdio.h>
int main()
{
int a = 2;
int b = --a;//先--,后使用 a=a-1;b=a;
printf("%d\n", b);//1
int c = 2;
int d = c--;//先使用,后-- d=c;c=c-1;
printf("%d\n", d);//2
return 0;
}
++ :前置、后置++
//++:前置、后置++
#include <stdio.h>
int main()
{
int a = 2;
int b = ++a;//先++,后使用 a=a+1;b=a;
printf("%d\n",b);//3
int c = 2;
int d = c++;//先使用,后++ d=a;a=+1;
printf("%d\n", d);//2
return 0;
}
* :间接访问操作符(解引用操作符)(后面讲)
(类型):强制类型转换
//(类型):强制类型转换
#include <stdio.h>
int main()
{
int a = 3.14;//3.14字面浮点数,编译器默认理解为double类型
int b = (int)3.14;//强制转换为整型
printf("%d\n", b);//3
return 0;
}
关系操作符
用于测试“不相等”:> >= < <= !=
用于测试“相等”:==
(由于判断不相等的操作符都很好理解,所以笔者在这着重强调==的使用)
//关系操作符
//用于判断不相等:> >= < <= !=
//用于判断相等:==
#include <stdio.h>
int main()
{
int a = 10;
if (a = 3)
{
printf("hello\n");//hello
}
}
#include <stdio.h>
int main()
{
int a = 10;
if (a == 3)
{
printf("hello\n");//不会输出值
}
return 0;
}
仔细对比上面两个代码的区别,想一想为什么第一个会输出“hello”,而第二个不会输出呢?
解析:因为第一个代码if语句里a=3是赋值,而3为真,则输出“hello”
而第二个代码里a==3才是判断是否相等,不相等为假,则不会输出任何值
逻辑操作符
&&:逻辑与 ||:逻辑或
//&&:逻辑与-并且
//||:逻辑或-或者
#include <stdio.h>
int main()
{
int a = 2;
int b = 4;
if (a && b)
{
printf("hello\n");
}
return 0;
}
&&:逻辑与,两个都为真才为真,若其中有一个为假,结果就为假,不会输出,读者可将其中一个值改为0试验一下
#include <stdio.h>
int main()
{
int a = 2;
int b = 0;
if (a || b)
{
printf("hello\n");
}
return 0;
}
||:逻辑或,两个只要有一个为真结果就为真,若两个都为假结果才为假
条件操作符(三目操作符)
exp1 ? exp2 :exp3 (有三个操作数)
//条件操作符(三目操作符):有三个操作数
#include <stdio.h>
int main()
{
int a = 2;
int b = 4;
int r = (a > b ? a : b);//判断ab大小
//a>b吗?大于结果就是a,小于结果就是b
printf("%d\n", r);//4
return 0;
}
逗号表达式
//逗号表达式:exp1,exp2,exp3,....expN
//逗号表达式就是逗号隔开的一串表达式
//逗号表达式的特点:从左向右以此计算,整个表达式的结果是最后一个表达式的结果
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = 0;
int d = (c = a + 2, a = b + c, c - 3);//c=12,a=32,c=9
printf("%d\n", d);//9
return 0;
}
下表引用、函数调用和结构成员
[ ] () . ->
//下表引用操作符
#include <stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int n = 3;//数组下标引用可以定义变量
arr[n] = 20;//[]就是下标引用操作符,arr和3就是[]的操作数
return 0;
}
//函数调用操作符
#include <stdio.h>
int Add(int x, int y)
{
return x + y;
}
int main()
{
int sum = Add(2 , 4);//()就是函数调用操作符,Add,2,3都是()的操作数
printf("%d\n",sum);
return 0;
}
. -> (后面讲)