当前位置: 首页 > news >正文

【C语言基础】:操作符详解(一)

文章目录

    • 操作符详解
      • 1. 操作符的分类
      • 2. 二进制和进制转换
        • 2.1 什么是二进制、八进制、十进制、十六进制
          • 2.1.1 二进制和进制转换
          • 2.1.2 二进制转十进制
          • 2.2.3 二进制转八进制
          • 2.2.4 二进制转十六进制
      • 3. 源码、反码、补码
      • 4. 移位操作符
        • 4.1 左移操作符
        • 4.2 右移操作符
      • 5. 位操作符:&、|、^、~
        • 5.1 按位与 &
        • 5.2 按位或 |
        • 5.3 按位异或 ^
        • 5.5 按位取反 ~

操作符详解

1. 操作符的分类

C语言中,操作符分为算术操作符赋值操作符逻辑操作符条件操作符单目操作符等等。

. 算术操作符:+ 、- 、* 、 %
. 移位操作符: << >>
. 位操作符: &、|、^
. 赋值操作符: = 、+= 、 -= 、 = 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=
. 单目操作符: ! 、++、–、&、、+、-、~ 、sizeof(类型)
. 关系操作符: > 、>= 、< 、<= 、 == 、 !=
. 逻辑操作符: && 、||
. 条件操作符: ? :
. 逗号表达式: ,
. 下标引用: []
. 函数调用: ()

2. 二进制和进制转换

2.1 什么是二进制、八进制、十进制、十六进制

在这里插入图片描述

2.1.1 二进制和进制转换

通俗来讲二进制、八 进制、 十进制、 十六进制是数值的不同表示形式而已。
比如:数值15的各种进制的表示形式:

152进制表现形式: 1111
158进制表现形式: 17
1510进制表现形式: 15
1516进制表现形式: F
//16进制的数值之前写:0x
//8进制的数值之前写:0
#include<stdio.h>
int main()
{printf("%d\n", 153);printf("%d\n", 0153);printf("%d\n", 0x153);return 0;
}

在这里插入图片描述

2.1.2 二进制转十进制

十进制的123表示的值是一百二十三 ,十进制的每一位是有权重的 ,十进制的数字从右向左是个位、十位、百位… ,分别每一位的权重是 100 , 101 , 102 …
在这里插入图片描述
二进制和十进制是类似的 ,只不过二进制的每—位的权重
在这里插入图片描述
十进制转二进制数字
在这里插入图片描述
进行转化的方法就是:这个数字%2,得到的余数写在一边,直到最后被除数为0时,再将数字从下往上抄上,这个数字即为十进制数字的二进制数
所以120转成二进制就是1111000

2.2.3 二进制转八进制

8进制的数字每一位是0 ~ 7的,0~7的数字,各自写成2进制,最多有3个二进制位就足够了,比如7的二进制是111 ,所以在二进制转八进制数的时候 ,从二进制序列中右边低位开始向左每3个二进制位会换算一 个八进制位 ,剩余不够3个二进制位的直接换算。

如:二进制的 01101011,换成八进制:0153,0开头的数字,会被当做八进制。
在这里插入图片描述

2.2.4 二进制转十六进制

十六进制的数字每一位是0 ~ 9,a ~ f 的,0~9,a ~ f的数字,各自写成二进制,最多有4个二进制位就足够了,比如 f 的二进制是1111,所以在二进制转十六进制数的时候,从二进制序列中右边低位开始向左每4个二进制位会换算一个十六进制位,剩余不够4个二进制位的直接换算。

如:二进制的01101011,换成十六进制:0x6b ,十六进制表示的时候前面加0x
在这里插入图片描述

3. 源码、反码、补码

整数的二进制表示方法有三种 ,即原码、反码和补码
有符号整数的三种表示方法均有符号位数值位两部分,二进制序列中,最高位的1位是被当做符号位,剩余的都是数值位。
符号位都是用0表示“正” ,用1表示“负”。

负整数的原码、反码、补码表示方法各不相同
原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。
注意正数的原码、反码、补码相同
补码得到原码也是可以使用:取反,+1的操作。

对于整形来说:数据存放内存中其实存放的是补码
计算机中进行计算是使用补码,%d打印是用原码

这是因为在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一 处理; 同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

#include<stdio.h>
int main()
{int a = 10;// a是整型,即a占4个字节(32bite)位// 00000000000000000000000000001010 -> a的原码// 00000000000000000000000000001010 -> a的反码// 00000000000000000000000000001010 -> a的补码int b = -10;// 10000000000000000000000000001010 -> b的原码// 11111111111111111111111111110101 -> b的反码// 11111111111111111111111111110110 -> b的补码return 0;
}

在这里插入图片描述

4. 移位操作符

左移操作符:<<
右移操作符:>>
:移位操作符的操作数只能是整数

4.1 左移操作符

移位规则:左边抛弃、右边补0

#include<stdio.h>
int main()
{int a = 10;int b = a << 1;printf("b = %d\n", b);printf("a = %d\n", a);return 0;
}

在这里插入图片描述
在这里插入图片描述

可以看到左移一位有乘以2的效果。

4.2 右移操作符

移位规则:首先右移运算分两种:

  1. 逻辑右移:左边用0填充,右边丢弃
  2. 算术右移:左边用原该值的符号位填充,右边丢弃
    在这里插入图片描述

逻辑右移比较简单粗暴,直接在左边添0,显然,这会使得负数右移后变成正数。

在这里插入图片描述
算数右移与逻辑右移不同,它是在左边补原该值的符号位进行填充,不会出现负数右移变正数的情况。

#include<stdio.h>
int main()
{int a = -1;int b = a >> 1;printf("b = %d\n", b);printf("a = %d\n", a);return 0;
}

在这里插入图片描述
注意:右移是算数右移还是逻辑右移标准中没有规定,这是取决于编译器的。

5. 位操作符:&、|、^、~

位操作符有:

&       //按位与
|       //按位或
^       //按位异或
~       //按位取反

这里的位表示二进制位。
:他们的操作数必须是整数。

5.1 按位与 &

在 C 语言中,按位与运算符用符号 & 表示。
按位与的规则是:两个操作数对应的的二进制位中都为1时,结果为1,否则为0。

这里我们直接上代码

#include<stdio.h>
int main()
{int a = 10;int b = -7;int c = a & b;printf("%d\n", c);return 0;
}

在这里插入图片描述
在这里插入图片描述

5.2 按位或 |

在 C 语言中,按位或运算符用符号 | 表示。
按位或的规则是:两个操作数对应的的二进制位中任何一个对应的位为1,那么结果中的该位就为 1;只有当两个操作数的对应位都为 0 时,结果中的该位才为 0。

#include<stdio.h>
int main()
{int a = 10;int b = -7;int c = a | b;printf("%d\n", c);return 0;
}

在这里插入图片描述
在这里插入图片描述

5.3 按位异或 ^

在 C 语言中,按位异或运算符使用符号 ^ 表示。
按位异或的规则是:两个操作数中的对应位相同(都为 0 或都为 1),则结果中的该位为 0;如果两个操作数中的对应位不同(一个为 0,一个为 1),则结果中的该位为 1。

#include<stdio.h>
int main()
{int a = 10;int b = -7;int c = a ^ b;printf("%d\n", c);return 0;
}

在这里插入图片描述
在这里插入图片描述

5.5 按位取反 ~

在 C 语言中,按位取反运算符使用符号 ~ 表示。
按位取反规则是:当对一个操作数进行按位取反运算时,其二进制表示中的每个位都会被反转(0 变成 1,1 变成 0)。

#include<stdio.h>
int main()
{int a = 10;int b = ~a;printf("%d\n", b);return 0;
}

在这里插入图片描述
在这里插入图片描述

相关文章:

【C语言基础】:操作符详解(一)

文章目录 操作符详解1. 操作符的分类2. 二进制和进制转换2.1 什么是二进制、八进制、十进制、十六进制2.1.1 二进制和进制转换2.1.2 二进制转十进制2.2.3 二进制转八进制2.2.4 二进制转十六进制 3. 源码、反码、补码4. 移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符&…...

通俗易懂分析:Vite和Webpack的区别

1、对项目构建的理解 先从浏览器出发&#xff0c; 浏览器是由浏览器内核和JS引擎组成&#xff1b;浏览器内核编译解析html代码和css代码&#xff0c;js引擎编译解析JavaScript代码&#xff1b;所以从本质上&#xff0c;浏览器只能识别运行JavaScript、CSS、HTML代码。 而我们在…...

OpenCart程序结构与业务逻辑

一、程序业务逻辑说明 在 OpenCart 中&#xff0c;index.php 文件是整个应用程序的入口文件&#xff0c;它负责初始化应用程序并调度请求。以下是 index.php 文件加载执行的流程&#xff1a; 1. **设置路径常量&#xff1a;** - index.php 首先定义了一些重要的路径常量&…...

软件License授权原理

软件License授权原理 你知道License是如何防止别人破解的吗?本文将介绍License的生成原理,理解了License的授权原理你不但可以防止别人破解你的License,你甚至可以研究别人的License找到它们的漏洞。喜欢本文的朋友建议收藏+关注,方便以后复习查阅。 什么是License? 在…...

C/C++实现老鼠走迷宫

老鼠形象可以辨认&#xff0c;可以用上下左右操纵老鼠;正确检测结果&#xff0c;若老鼠在规定的时间内走到粮仓&#xff0c;提示成功&#xff0c;否则提示失败。代码分为3个文件&#xff1a;main.cpp、play.h、play.cpp。 main.cpp: #include <iostream> #include <…...

[Linux]文件基础-如何管理文件

回顾C语言之 - 文件如何被写入 fopen fwrite fread fclose fseek … 这一系列函数都是C语言中对文件进行的操作&#xff1a; int main() {FILE* fpfopen("text","w");char str[20]"write into text";fputs(str,fp);fclose(fp);return 0; }而上…...

bat 查找文件所在

脚本 在批处理文件&#xff08;.bat&#xff09;中查找文件所在的目录&#xff0c;你可以使用dir命令结合循环和条件语句来实现。以下是一个简单的示例&#xff0c;演示如何在批处理文件中查找指定文件并输出其所在目录&#xff1a; echo off setlocal enabledelayedexpansio…...

程序员的守护神:为何电脑永不熄灭?

在这个信息时代&#xff0c;程序员成了推动社会进步的“隐形英雄”。他们通宵达旦&#xff0c;手指在键盘上跳跃&#xff0c;创造出一个个令人惊叹的数字世界。有趣的是&#xff0c;你可能注意到了一个现象&#xff1a;程序员似乎总是不关电脑。这并非他们对电脑上瘾&#xff0…...

Kafka快速实战以及基本原理详解

Kafka快速实战以及基本原理详解 基本概念 Kafka是一个分布式、支持分区、多副本&#xff0c;基于ZK的分布式消息系统&#xff0c;最大的特性就是可以实时的处理大量数据以满足各种需求场景&#xff0c;比如Hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎、日…...

微信小程序(4)- 事件系统和模板语法

1. 事件系统 1.1 事件绑定和事件对象 小程序中绑定事件与在网页开发中绑定事件几乎一致&#xff0c;只不过在小程序不能通过 on 的方式绑定事件&#xff0c;也没有 click 等事件&#xff0c;小程序中绑定事件使用 bind 方法&#xff0c;click 事件也需要使用 tap 事件来进行代…...

【Java多线程】对线程池的理解并模拟实现线程池

目录 1、池 1.1、线程池 2、ThreadPoolExecutor 线程池类 3、Executors 工厂类 4、模拟实现线程池 1、池 “池”这个概念见到非常多&#xff0c;例如常量池、数据库连接池、线程池、进程池、内存池。 所谓“池”的概念就是&#xff1a;&#xff08;提高效率&#xff09; 1…...

python连接mysql数据库

连接MySQL数据库&#xff0c;通常我们会使用Python的mysql-connector-python库。下面是一个基本的示例来展示如何使用Python连接到MySQL数据库。 首先&#xff0c;确保你已经安装了mysql-connector-python库。如果没有&#xff0c;你可以使用pip来安装它&#xff1a; pip ins…...

docker用法

首先需要去docker官网注册你的账号&#xff0c;记住账号名称和密码&#xff1b; 然后在本地执行&#xff1a; docker login登录OK。 把ubuntu下载到本地&#xff1a; sudo docker pull ubuntusudo docker images输出&#xff1a; REPOSITORY TAG …...

DIcom调试Planar configuration

最近和CBCT组同事调dicom图像 这边得图像模块老不兼容对方得dicom文件。 vtk兼容&#xff0c;自己写得原生解析不兼容。 给对方调好了格式&#xff0c;下次生成文件还会有错。 简单记录下&#xff0c;日后备查。 今天对方又加了 个字段&#xff1a;Planar configuration 查…...

C#与VisionPro联合开发——跳转页面

1、跳转页面并打开相机 From1 所有代码展示 using System; using System.IO; using System.Windows.Forms; //引入VisionPro命名空间 using Cognex.VisionPro;namespace ConnectCamera {public partial class Form1 : Form {public Form1() {InitializeComponent();}CogAcqFif…...

服务端测试开发必备技能:Mock测试

什么是mock测试 Mock 测试就是在测试活动中&#xff0c;对于某些不容易构造或者不容易获取的数据/场景&#xff0c;用一个Mock对象来创建以便测试的测试方法。 Mock测试常见场景 无法控制第三方系统接口的返回&#xff0c;返回的数据不满足要求依赖的接口还未开发完成&#…...

vue3中ref创建变量取值时自动补充 .value 插件 volar

插件 TypeScript Vue Plugin (Volar) 设置中配置...

clickhouse的docker部署与springboot整合

注意:镜像bitnami/clickhouse包含服务端和客户端,yandex版本需要使用yandex/clickhouse-server,yandex/clickhouse-server docker启动命令(允许空密码 -e ALLOW_EMPTY_PASSWORD=yes),clickhouse版本不同,配置文件在的位置也会不一样/etc/clickhouse-server/config.xml d…...

Node.js_基础知识(计算机硬件基础)

主机的基本组成 CPU:Central Processing Unit,即中央处理器,是计算机的核心部件。是一块集成电路芯片,能够执行计算机指令并控制计算机的各种操作,负责运算和处理数据内存:是电脑硬件中的一块电路板,用于暂时存储CPU中的运算数据,是计算机与CPU进行沟通的桥梁,负责存储…...

git bash :download.sh: line 1: wget: command not found(已解决)

Windows中git bash完全可以替代原生的cmd&#xff0c;但是对于git bash会有一些Linux下广泛使用的命令的缺失&#xff0c;比如wget命令。 1、下载wget.exe&#xff0c;地址&#xff1a;https://eternallybored.org/misc/wget/ 2、将wget.exe 拷贝到C:\Program Files\Git\ming…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...