C语言 - 操作符(简单介绍)总结

先赞再看,养成习惯!!!你的支持是对我最大帮助!


操作符

简单介绍为主,后面会详细讲

操作符
算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
等等

算术操作符

算术操作符对应符号与使用方式
+加号( 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;
}

变量a
整型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;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值