先赞再看,养成习惯!!!你的支持是对我最大帮助!
操作符
简单介绍为主,后面会详细讲
算术操作符
算术操作符 | 对应符号与使用方式 |
---|---|
+ | 加号( 1+2 ) |
- | 减号 ( 2-1 ) |
* | 乘号( 2*3 这里输出结果为6 ) |
/ | 除号( 5/2 )输出结果为商 |
% | 取模( 5%2 )输出结果为余数 |
#include<stdio.h>
int main()
{
int a = 5/2; // 输出2,除得到的结果商
printf("%d\n",a);
int b = 5%2; // 输出1,取模,结果为余数
printf("%d\n",b);
return 0;
}
移位操作符
移位操作符( 2进制 ) | 用法 |
---|---|
<< | 左移 |
>> | 右移 |
#include<stdio.h>
int main()
{
int a = 1;
// 整型1占4个字节 - 32个比特位
//00000000000000000000000000000001
int b = a << 1;
int c = a << 2;
printf("%d\n",b);
printf("%d\n",c);
printf("%d\n",a);
return 0;
}
整型1占4个字节 - 32个比特位
所以这幅图是整型1的比特位,命名为a
a << 1
向右移一位
多余去掉不要,末尾默认添零
所以a = 00000000000000000000000000000010
为输出字符为 2
** >> 左移字符,基本相同**
位操作符
(2进制)位操作 | 作用 |
---|---|
& | 按位与 |
| | 按位或 |
^ | 按位异或 |
1.按位与
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a&b;
printf("%d\n",c);
return 0;
}
“与”其实就是并起来的意思
3 - - 二进制 - -> 011
5 - - 二进制 - -> 101
在C语言中 0 为假,其他数为真
011
101
按位与得001
过程:
1.第三行, 0 为假 , 1 为真 ---- 一假一真,用假 - - - - > 得到 0
2.第二行,相同 - - - - > 得到0
3.第一行, 1 为真 ,1 为真 ---- 两个真 - - - - > 得到 1
4.结果为 001
5.在ASCII中二进制 001 对应的字符为 1
注:按位与只有两个真才为真,一真一假为假,两假为假
2.按位或
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a|b;
printf("%d\n",c);
return 0;
}
按位或只要两个中有一个为真,就可以为真,两个真为真,两个假为假,一假一真为真。
所以
011
101
得到111
在ASCII中二进制 111 对应的字符为 7
3.按位异或
异或的计算规律:
对应的二进制位相同,则为0
对应的二进制位相异,则为1
所以
011
101
得到110
#include<stdio.h>
int main()
{
int a = 3;
int b = 5;
int c = a^b;
printf("%d\n",c);
return 0;
}
位操作符有它自己的作用,后面会讲到
赋值操作符
赋值操作符 | 作用 |
---|---|
= | 赋值 |
+= | a += 1 完全等于 a = a+1 |
-= | a -= 1 完全等于 a = a-1 |
&= | a &= 1 完全等于 a = a&1 |
*= | a = 1 完全等于 a = a1 |
/= | a /= 1 完全等于 a = a/1 |
^= | a ^= 1 完全等于 a = a^1 |
|= | a |= 1 完全等于 a = a|1 |
<<= | a <<= 1 完全等于 a = a << 1 |
>>= | a >>= 1 完全等于 a = a >> 1 |
** = 和 == 区别**
操作符 | 作用 |
---|---|
= | 赋值 |
== | 判断相等 |
复合赋值符
+= -= *= /= 这些都称为复合赋值符
单目操作符
单目操作符 | 作用 |
---|---|
! | 反逻辑操作符 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
-- | 前置、后置-- |
++ | 前置、后置++ |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
用法
#include<stdio.h>
// ! - +
int main()
{
int a = -2; // 负号
int b = +10;// 通常正号省略
int c = 0;
printf("%d\n",a); // 输出 -2
printf("%d\n",b); // 输出 11
printf("%d\n",!b);// 输出 0 (10为真,非真为假)
printf("%d\n",c);;// 输出 0
printf("%d\n",!c);// 输出 1 (0为假,非假为真)
//在C语言中 0 为假,其他数为真
return 0;
}
#include<stdio.h>
#include<string.h>
// sizeof()
int main()
{
int sz = 0;
int a = 1;
//sizeof 计算的是变量/类型所占空间大小,单位为字节
printf("%d\n",sizeof(a)); // 输出 - 4
printf("%d\n",sizeof(int));// 输出 - 4
int arr[10] = {0};
printf("%d\n",sizeof(arr));// 输出 - 40 输出的是字节总大小
//10*sizeof(int) = 40
//计算数组的元素个数
//个数 = 数组总大小/每个元素的大小
sz = sizeof(arr) / sizeof(arr[1]);
printf("%d\n",sz);
return 0;
}
#include<stdio.h>
// ~ -- 按位取反(二进制)
int main()
{
int a = 0; // 4个字节 -- 32比特位
int b = ~a; // b是有符号的整形(如果是一个有符号的整形,最前面的一位是符号位,0为正,1为负 )
// ~ -- 按位取反(二进制)
// 1变0,0变1
// a -二进制-> 00000000000000000000000000000000
// ~a -二进制-> 11111111111111111111111111111111
//原码、反码、补码
//负数在内存中储存的时候,储存的是二进制的补码
// 11111111111111111111111111111111 补码
// 补码减1,得到原码
// 11111111111111111111111111111110 反码
// 符号位不变,其他位按位取反
// 10000000000000000000000000000001 原码
printf("%d\n",b);// 输出 -1
// 我们使用的、打印的是这个数的原码
return 0;
}
#include<stdio.h>
// ++
int main()
{
int a = 10;
int b = a++;//后置++,先使用,再++
printf("a = %d b = %d\n",a,b); // 输出 a = 11 b = 10
a = 10;
int c = ++a;//前置++,先++,再使用
printf("a = %d c = %d\n",a,c); // 输出 a = 11 b = 11
return 0;
}
#include<stdio.h>
// --
int main()
{
int a = 10;
int b = a--;//后置--,先使用,再--
printf("a = %d b = %d\n",a,b); // 输出 a = 9 b = 10
a = 10;
int c = --a;//前置--,先--,再使用
printf("a = %d c = %d\n",a,c); // 输出 a = 9 b = 9
return 0;
}
#include<stdio.h>
int main()
{
int a = 3.14; //出现警告 “从‘double’转到‘int’,可能丢失数据”
printf("%d\n",a);// 也可能不出现警告,但会只保留整数(此输出 3)
//如果想强制改类型,就用 (类型)
a = (int)3.14;
printf("%d\n",a); // 这样就不会出现警告了
return 0;
}
关系操作符
关系操作符 | 作用 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
!= | 不相等(用于测试“不相等”) |
== | 相等(用于测试“相等”) |
注意!!!
要与数学符号区分好,不要搞混了!!!
逻辑操作符
逻辑操作符 | 作用 |
---|---|
&& | 逻辑与 |
|| | 逻辑或 |
#include<stdio.h>
//举例
// && ||
int main()
{
// 真 - 非零
// 假 - 0
// && - 逻辑与
int a = 3;
int b = 5;
int c = 0;
int d = a&&b;
int e = a&&c;
printf("%d\n",d); // 输出 1
printf("%d\n",e); // 输出 0
// || -- 逻辑或
d = a||b;
e = a||c;
printf("%d\n",d); // 输出 1
printf("%d\n",e); // 输出 1
return 0;
}
- 真 - 非零
- 假 - 0
逻辑与
- 只有两个都为真,输出为真
- 只要两个其中一个为假,输出就为假
逻辑或
- 只有两个都为假,输出为假
- 只要两个其中一个为真,输出就为真
条件操作符(三目操作符)
条件操作符 | 作用 |
---|---|
exp1 ? exp2 : exp3; | 见下 |
注:exp表示一个表达式,不要把它想象成一个值
exp1 ? exp2 : exp3; 这整体是一个表达式
- 如果表达式1(exp1)的结果为真,则运行表达式2(exp2),表达式2(exp2)为最终结果
- 如果表达式1(exp2)的结果为假,则运行表达式3(exp3),表达式3(exp3)为最终结果
举例代码如下:
int a = 3;
int b = 6;
int c = 0;
c = a > b ? a : b;
//a > b 为表达式1,a为表达式2,b为表达式3
//该语句的意思为:如果a>b,则将a的值赋给c,否则将b的值赋给c
以上语句等价于下面的if…else语句
int a = 3;
int b = 6;
int c = 0;
if (a > b)
{
c = a;
}
else
{
c = b;
}
逗号表达式
例子:
exp1,exp2,exp3,…expN
不需要了解太多,只需要知道表达式可以用逗号来分支
下标引用、函数调用和结构成员
操作符 | 作用 |
---|---|
[ ] | 下标引用操作符 |
( ) | 函数调用 |
. | 后面会介绍 |
-> | 后面会介绍 |
int arr[10]; //创建数组
arr[8] = 2; //下标引用
//[ ]的两个操作数为arr 和 8
#include<stdio.h>
int Add(int x,int y)
{
int z = x+y;
return z;
}
int main()
{
int a = 0;
int b = 0;
int num1 = 100;
int num2 = 200;
scanf("%d%d",&a,&b);
int c = a + b;
int num3 = num1 + num2;
int d = Add(a,b);
printf("C = %d\n",c);
printf("%d\n",num3);
printf("%d\n",d);
return 0;
}