【筑基系列】 认识操作符(上)

简介: 详细了解操作符
1.算术操作符
+ - * / %

🔧+、-、*、/这四个运算符均可用于整数及浮点数的运算。

🔧 当使用/运算符时,如果两个操作数均为整型,那么执行整数除法,运算结果也为整型;如果两个操作数至少一个为浮点数,那么执行浮点数运算,运算结果 为浮点型。

🔧 %运算符只能用于两个整数相除,返回余数。

2.移位操作符
<< 左移操作符

\>> 右移操作符

注:移位操作符的操作数只能是整数,一个整数在内存中存储的是补码,一位操作针对的是补码

1.左移操作: 左边抛弃、右边补0(相当于左移一位,乘以2)

image-20220522201622579

实际上,a在没赋值的情况下,自身的值不会发生变化

2.右移操作

🔧算术右移 (右边丢弃,左边补原来的符号位数)

🔧逻辑右移 (右边丢弃,左边不用考虑符号位数,直接用0补充)

到底是 算术右移还是 逻辑右移,取决于编译器,我们常见的编译器大多都是算术右移

image-20220522202413803

对于移位运算符还需要注意的一点是:不要移动负位数,这是标准未定义的,c语言并没有规定负移位数该怎么做,所以不能写成负数
3.位操作符
& //按位与

| //按位或

^ //按位异或

注:他们的操作数必须是整数

一个奇数(十进制)位与1的结果是1,一个偶数(十进制)位与1的结果是0

& ----同时1则为1,否则为0

| -----有1则1,否则为0

^ ---相同为0,相异为1

例题一 : 不能创建临时变量实现两个数的交换
#include<stdio.h>
 
int main()
{
    int a = 5;
    int b = 3;
    printf("交换前:a=%d  b=%d\n", a, b);
    //3^ 3 = 0
    //011^ 011 = 000
    //0 ^  5 = 5
    //000^ 101 = 101
    //3 ^ 5^ 3 =5
    a = a ^ b;            //3^5
    b = a ^ b;              //3^ 5 ^ 3 = 5
    a = a ^ b;              //3^ 5^ 5 = 3
    printf("交换后:a=%d  b=%d\n", a, b);
    return 0;
}

image-20220522204215855

4.赋值操作符
=

复合类型

+= a = a+ 1

-= a= a- 1

*= ....

/= ....

%=

\>>=

<<=

&=

|=

^=

5.单目操作符
! 逻辑反操作

- 负值

+ 正值

& 取地址

sizeof 操作数的类型长度(以字节为单位)

~ 对一个数的二进制按位取反

-- 前置、后置--

++ 前置、后置++

* 间接访问操作符(解引用操作符)

  1. !

    //C语言中0表示假,非零表示真

    int flag = 0;
    //当flag为假的时候打印haha
    if (!flag)    //只需用上逻辑反操作符 ! 就能打印了
    {
        printf("haha\n");
    }
  1. &

    int a= 2;
    printf("%p",&a); //取出a的地址

​ 3 . sizeof

    int a = 10;
    printf("%d\n", sizeof(a));   //计算a所占内存空间的大小为4个字节
    printf("%d\n", sizeof(int)); //计算int类型为4个字节
    int arr[5] = { 1,2,3,4,5};
    printf("%d\n", sizeof(arr));  // 数组名arr单独放在sizeof代表的是整个数组,
                                  //因为arr数组是int型且里面有5个元素,
                                  //int型大小是4个字节,所以总大小为20个字节
  1. ​ ~
int a=0;
 
printf("%d\n",~a);
 
//  0000 0000 0000 0000 0000 0000 0000 0000  -因为0是正数,原反补相同
//  1111 1111 1111 1111 1111 1111 1111 1111  - 把0的补码每一位进行取反
 
//又因为要打印出来,得把补码转换成原码
//  1111 1111 1111 1111 1111 1111 1111 1111  - 补码
//  1111 1111 1111 1111 1111 1111 1111 1110  - 反码
//  1000 0000 0000 0000 0000 0000 0000 0001  - 原码
 
//  打印出来的结果为 -1

5 -- + +

#include <stdio.h>
int main()
{
    int a = 10;
    int m =++a;//先加后赋值
    int n =--a;//先减后赋值
    int x = a++;//先赋值后加
    int y = a--;//先赋值后减
    return 0;   
    }
  1. *解引用操作符

    int a=10;
    int *p=&a;
    *p=20;  // p是指针变量存的是a的地址,*p 解引用操作符通过p存放的地址找到a,并重新给a赋值成20; 
    printf("%d\n",a);   // 因此a最终的结果为20
相关文章
|
算法 Java 机器人
手把手教你提交Jar包到Maven公共仓库
在上一篇文章中,我介绍了自己的SpringBoot Starter项目,可以让我们使用注解的方式轻松地获取操作日志,并推送到指定数据源。 之前,我的项目开源在Github上,大家想要用我的项目,还得把Github仓库配置到Maven的Setting.xml里,一点也不方便。 本文,就整理一下我把项目上传到公共Maven仓库的过程,当做一篇教程文章。
2795 0
|
8月前
|
IDE 开发工具 C++
JetBrains CLion 2025.1 发布 - C 和 C++ 跨平台 IDE
JetBrains CLion 2025.1 (macOS, Linux, Windows) - C 和 C++ 跨平台 IDE
369 0
|
10月前
|
存储 人工智能 弹性计算
NVIDIA NIM on ACK:优化生成式AI模型的部署与管理
本文结合NVIDIA NIM和阿里云容器服务,提出了基于ACK的完整服务化管理方案,用于优化生成式AI模型的部署和管理。
|
vr&ar
编译原理----算符优先级的分析(自底向上)
编译原理----算符优先级的分析(自底向上)
372 4
|
12月前
|
运维 监控 DataWorks
DataWorks 稳定性保障全解析:深入监控与资源调配
DataWorks 的稳定性保障体系涵盖精细监控与资源调配,确保企业数据业务高效、稳定运行。监控模块包括资源、任务和质量监控,及时预警并处理异常;资源调配策略则针对集成、调度、数据服务及计算资源进行科学配置,保障数据同步、任务优先级和高并发需求。通过全方位的监控和合理的资源配置,DataWorks 为企业筑牢数据根基,助力数字化转型。
517 10
|
IDE Linux 开发工具
一网打尽:C++远程调试工具和策略全指南
一网打尽:C++远程调试工具和策略全指南
338 2
|
jenkins 持续交付 网络安全
Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号
Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号
407 0
|
机器学习/深度学习 数据采集 算法
Python基于卷积神经网络CNN模型和VGG16模型进行图片识别项目实战
Python基于卷积神经网络CNN模型和VGG16模型进行图片识别项目实战
|
存储 传感器 安全
【C++ std::variant】深入探索 C++ std::variant:构造方法与实践应用
【C++ std::variant】深入探索 C++ std::variant:构造方法与实践应用
732 5
|
Python
在Python中,pandas库的`get_dummies`函数
在Python中,pandas库的`get_dummies`函数
1575 2