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

操作符详解(上) (C语言)

操作符详解(上)

  • 一. 进制转换
    • 1. 二进制
    • 2. 二进制的转换
  • 二. 原码 补码 反码
  • 三. 操作符的分类
  • 四. 结构成员访问操作符
    • 1. 结构体的声明
    • 2. 结构体成员访问操作符

一. 进制转换

1. 二进制

在学习操作符之前,我们先了解一些2进制、8进制、10进制等的问题,我们在平时的学习中经常听到关于进制转换的问题,其实就是数字的表达形式不同,比如我们将数字15用不同的进制表示出来:在这里插入图片描述
(另外16进制前面加的是0x,8进制前面加的是0)
我们重点介绍一下二进制:
首先我们还是得从10进制讲起,其实10进制是我们⽣活中经常使用的,我们已经形成了很多尝试:
• 10进制中满10进1
• 10进制的数字每一位都是0~9的数字组成
其实二进制也是一样的
• 2进制中满2进1
• 2进制的数字每⼀位都是0~1的数字组成
那么1101 就是二进制的数字了。

2. 二进制的转换

(1) 2进制转8进制:比如15的二进制是1111,那么换成8进制就是利用15除以8看每次的余数和商,那么8进制就是17,其实8进制的每⼀位是有权重的,8进制的数字从右向左是个位、⼗位、百位…,分别每⼀位的权重是80、81、82…那么15也就是80 *7+81 *1,这就是15从二进制转成了8进制。
(2) 10进制转2进制:道理是一样的,10进制的每⼀位是有权重的,10进制的数字从右向左是个位、⼗位、百位…,分别每⼀位的权重是 100 , 101 , 102…比如123用10进制表示就是123,而转为2进制:在这里插入图片描述

二. 原码 补码 反码

当我们掌握了2进制等的转换,我们就要了解一下计算机中对于整数的三种表现形式,即整数的原码、补码、反码有符号整数的三种表示方法均有符号位数值位两部分,2进制序列中,最高位的1位是被当做符号位,剩余的都是数值位。
符号位都是用0表示“正”,用1表示“负”。(一个整型是由四个字节组成,一个字节占8个bit位,所以一共由32个bit组成)
正整数的原、反、补码都相同
负整数的三种表示方法各不相同
原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。
补码得到原码也是可以使用:取反,+1的操作。
比如:15的原码补码反码是00000000000000000000000000001111
而 -15的原码是10000000000000000000000000001111,反码11111111111111111111111111110000(符号位不变,其他位按位取反),补码是11111111111111111111111111110001(末尾加1,得2进1,反码加1就是补码)
对于整形来说:数据存放内存中其实存放的是补码。为什么呢?
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统⼀处理;同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

三. 操作符的分类

(1) 移位操作符:<<左移操作符 --------- >>右移操作符,注意移位操作符只能适用于整数!并且移动的是二进制位中的补码
下面展示一些 内联代码片

//左移操作符
int main()
{int a = 10;int b = a << 1;printf("%d %d", a, b);return 0;
}

在这里插入图片描述
对于左移操作符来说原理只有一种就是左边抛弃,右边补0在这里插入图片描述
对于右移操作符也是一样的都是移动的2进制中的补码,右移操作符有两种方式:左边用0填充,右边补0左边用原该值的符号位填充,右边丢弃

(2) 位操作符:&(按位与) |(按位或) ^(按位异或) ~(按位取反)
位操作符一般是由两个操作数来完成的,并且也只能用于整数。
&:对两个数的补码进行运算(一个0一个1是0,两个1才是1)
|: 也是补码进行运算(只要有1就是1,两个0才是0)
^: 相同为0相异为1(异或是支持交换律的)
~: 单个数字(按2进制的补码取反)
比如给大家举一个例子,不能创建临时变量(第三个变量),实现两个整数的交换。
下面展示一些 内联代码片

int main()
{int a = 3;int b = 9;a = a ^ b;b = a ^ b;a = a ^ b;printf("%d %d\n", a,b);return 0;
}

在也就用到了位操作符^,后面大家多对这些运算符号进行实践,也会发现它们的实用性和便捷感。

(3)单目操作符:! ++ – & * - ~
这些都是单个数字完成的,特点就是只有一个操作数,很多符号我们也都认识。
!: 对一个表达式取反操作,即如果表达式为真,则结果为假。
++ – : 比如1++就是1本身加上1等于2,1–就是1本身减去1等于0(但是需要注意的点是++放在1之前和1之后是不一样的)在这里插入图片描述
& :取地址操作符

  • :解引用操作符
    在单目操作符中只有 & 和 * 没有介绍,这2个操作符我们在后期学习指针的时候会详细的介绍。
    (4) 逗号表达式:1 exp1, exp2, exp3, …expN
    逗号表达式,就是⽤逗号隔开的多个表达式。逗号表达式,从左向右依次执行。整个表达式的结果是最后⼀个表达式的结果。
    (5) 下标访问[]、函数调用()

四. 结构成员访问操作符

1. 结构体的声明

什么结构体?在C语言中已经提供的内置类型比如char、short、int等,但是只有这些内置类型是不够的,所以增加了结构体这种自定义的数据类型。其实结构体就是一些值的集合,类型不一定相同。struct是结构体关键字。
结构体的声明: 在这里插入图片描述
在这里插入图片描述
下面展示一些 内联代码片

struct student
{//成员变量char name[20];int age;float score;	 
};int main()
{int a = 0;struct student s1;struct student s2;return 0;
}

上述代码就是结构体的创建,首先我们就使用struct创建了一个结构体,包括字符型、整型等,然后这就相当于一个类型了,再看我们下面的代码,就像int a一样我们使用struct student也创建变量s1、s2等,当然像代码中的变量属于局部变量,如果需要全局变量我们可以定义在函数的外部。另外我们可以直接在结构体定义的括号外面直接定义变量(也是全局变量)。

2. 结构体成员访问操作符

结构体成员的直接访问:结构体成员的直接访问是通过点操作符(.)访问的。点操作符接受两个操作数,使用方式:结构体变量.成员名在这里插入图片描述
结构体成员的间接访问:有时候我们得到的不是⼀个结构体变量,而是得到了⼀个指向结构体的指针。使用方式:结构体指针->成员名,如下所示:在这里插入图片描述
以上就是操作符的部分解析,下一部分我也会及时更新。

相关文章:

操作符详解(上) (C语言)

操作符详解&#xff08;上&#xff09; 一. 进制转换1. 二进制2. 二进制的转换 二. 原码 补码 反码三. 操作符的分类四. 结构成员访问操作符1. 结构体的声明2. 结构体成员访问操作符 一. 进制转换 1. 二进制 在学习操作符之前&#xff0c;我们先了解一些2进制、8进制、10进制…...

使用 audit2allow 工具添加SELinux权限的方法

1. audit2allow工具的使用 audit2allow 命令的作用是分析日志&#xff0c;并提供允许的建议规则或拒绝的建议规则。 1.1 audit2allow的安装 sudo apt-get install policycoreutilssudo apt install policycoreutils-python-utils 1.2 auditallow的命令 命令含义用法-v--ve…...

一文弄懂FPGA

一、FPGA简介 什么是FPGA&#xff1f; FPGA&#xff08;Field-Programmable Gate Array&#xff09;是一种可编程逻辑器件&#xff0c;可以在现场通过硬件描述语言&#xff08;HDL&#xff09;进行配置。它具有高度的灵活性和并行处理能力&#xff0c;广泛应用于通信、计算、…...

Rust 中使用 :: 这种语法的几种情况

文章目录 1. 访问模块成员&#xff1a;2. 访问关联函数或静态方法&#xff1a;3. 访问 trait 的关联类型或关联常量4. 指定泛型类型参数 1. 访问模块成员&#xff1a; mod utils {pub fn do_something() { /* ... */ } }let result utils::do_something();2. 访问关联函数或静…...

Ruby langchainrb gem and custom configuration for the model setup

题意&#xff1a;Ruby 的 langchainrb gem 以及针对模型设置的自定义配置 问题背景&#xff1a; I am working in a prototype using the gem langchainrb. I am using the module assistant module to implemente a basic RAG architecture. 我正在使用 langchainrb 这个 ge…...

高校新生如何选择最优手机流量卡?

一年一度的高考已经结束了&#xff0c;愿广大学子金榜题名&#xff0c;家长们都给孩子准备好了手机&#xff0c;那么手机流量卡应该如何选择呢&#xff1f; 高校新生在选择手机流量卡时&#xff0c;需要综合考量流量套餐、费用、网络覆盖、售后服务等多方面因素&#xff0c;以下…...

QT QML 生成二维码

Qt生成二维码 C++版 文章目录 步骤1:安装libqrencode步骤2:创建C++类生成二维码步骤3:将C++类与QML绑定步骤4:创建QML界面步骤5:配置项目文件总结在Qt QML中实现二维码生成,可以使用一个C++库来生成二维码,然后将生成的二维码图像传递给QML进行显示。一个常用的二维码生…...

IDEA中Maven--下载安装自己适配的版本---理解

Maven解释&#xff1a; Maven是一个强大的项目管理工具和构建工具&#xff0c;主要用于Java项目。它能够帮助开发团队管理项目的依赖、构建项目、发布文档和报告&#xff0c;并能够自动化许多重复的任务。 Maven的主要作用包括&#xff1a; 依赖管理&#xff1a;Maven能够管理…...

【osgEarth】Ubuntu 22.04 源码编译osgEarth 3.5

下载源代码 git clone --depth1 https://dgithub.xyz/gwaldron/osgearth -b osgearth-3.5 下载子模块 git submodule update --init 如果下载不过来&#xff0c;就手动修改下.git/config文件&#xff0c;将子模块的地址替换成加速地址 (base) yeqiangyeqiang-Default-string…...

ASP.NET Core 6.0 使用 资源过滤器和行为过滤器

1.AOP 面向切面编程 概念 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在通过预定义的模式(即“切面”)对程序的横切关注点进行模块化。横切关注点是一个在多个应用模块中出现的概念,例如日志记录、事务管理、安全检查等。AOP允许开发者定义“切面”…...

电脑屏幕花屏怎么办?5个方法解决问题!

“我刚刚打开电脑就发现我的电脑屏幕出现了花屏的情况。这让我很困惑&#xff0c;我应该怎么解决这个问题呢&#xff1f;求帮助。” 在这个数字时代的浪潮中&#xff0c;电脑早已成为我们生活中不可或缺的一部分。然而&#xff0c;当你正沉浸在紧张的游戏对战中&#xff0c;或是…...

git 初基本使用-----------笔记

Git命令 下载git 打开Git官网&#xff08;git-scm.com&#xff09;&#xff0c;根据自己电脑的操作系统选择相应的Git版本&#xff0c;点击“Download”。 基本的git命令使用 可以在项目文件下右击“Git Bash Here” &#xff0c;也可以命令终端下cd到指定目录执行初始化命令…...

Redis-数据类型-Bit的基本操作-getbit-setbit-Bitmap

文章目录 0、Bitmaps&#xff08;位图&#xff09;1、查看redis是否启动2、通过客户端连接redis3、切换到db7数据库4、设置&#xff08;或覆盖&#xff09;一个键&#xff08;key&#xff09;的值&#xff08;value&#xff09;5、获取存储在给定键&#xff08;key&#xff09;…...

统信UOS上鼠标右键菜单中添加自定义内容

原文链接&#xff1a;统信UOS上鼠标右键菜单中添加自定义内容 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于在统信UOS桌面操作系统上鼠标右键菜单中添加自定义内容的文章。通过自定义鼠标右键菜单&#xff0c;可以大大提升日常操作的效率和便捷性。本文将详细…...

学习入门 chatgpt原理 一

学习文章&#xff1a;人人都能看懂的chatGpt原理课 笔记作为学习用&#xff0c;侵删 Chatph和自然语言处理 什么是ChatGpt ChatGPT&#xff08;Chat Generative Pre-training Transformer&#xff09; 是一个 AI 模型&#xff0c;属于自然语言处理&#xff08; Natural Lang…...

生命在于学习——Python人工智能原理(4.7)

四、Python的程序结构与函数 4.4 函数 函数能将代码划分为若干模块&#xff0c;每一个模块可以相对独立的实现某一个功能&#xff0c;函数有两个主要功能&#xff0c;分别是降低编程难度和实现代码复用&#xff0c;函数是一种功能抽象&#xff0c;复用它可以将一个复杂的大问…...

经典游戏案例:仿植物大战僵尸

学习目标&#xff1a;仿植物大战僵尸核心玩法实现 游戏画面 项目结构目录 部分核心代码 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using Random UnityEngine.Random;public enum…...

[Day 18] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

強化學習與生成對抗網絡(GAN) 引言 強化學習 (Reinforcement Learning, RL) 和生成對抗網絡 (Generative Adversarial Networks, GANs) 是現代人工智能中的兩大關鍵技術。強化學習使得智能體可以通過與環境交互學習最佳行動策略&#xff0c;而生成對抗網絡則通過兩個相互競爭…...

【Mac】DMG Canvas for mac(DMG镜像制作工具)软件介绍

软件介绍 DMG Canvas 是一款专门用于创建 macOS 磁盘映像文件&#xff08;DMG&#xff09;的软件。它的主要功能是让用户可以轻松地设计、定制和生成 macOS 上的安装器和磁盘映像文件&#xff0c;以下是它的一些主要特点和功能。 主要特点和功能 1. 用户界面设计 DMG Canva…...

RAG分块方法 从固定大小到自然语言处理分块——深入研究文本分块技术

发掘文本分块-准确的搜索结果和更智能的语言模型背后的秘诀&#xff0c;通过了解如何有效地分块文本&#xff0c;我们可以改进索引文档、处理用户查询和利用搜索结果的方式。准备好揭开文本分块的秘密了吗? 一、了解分块 分块是一种旨在嵌入尽可能少噪音的内容&#xff0c;同…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

嵌入式学习笔记DAY33(网络编程——TCP)

一、网络架构 C/S &#xff08;client/server 客户端/服务器&#xff09;&#xff1a;由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序&#xff0c;负责提供用户界面和交互逻辑 &#xff0c;接收用户输入&#xff0c;向服务器发送请求&#xff0c;并展示服务…...

高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。

2024 年&#xff0c;高端封装市场规模为 80 亿美元&#xff0c;预计到 2030 年将超过 280 亿美元&#xff0c;2024-2030 年复合年增长率为 23%。 细分到各个终端市场&#xff0c;最大的高端性能封装市场是“电信和基础设施”&#xff0c;2024 年该市场创造了超过 67% 的收入。…...

Linux系统:进程间通信-匿名与命名管道

本节重点 匿名管道的概念与原理匿名管道的创建命名管道的概念与原理命名管道的创建两者的差异与联系命名管道实现EchoServer 一、管道 管道&#xff08;Pipe&#xff09;是一种进程间通信&#xff08;IPC, Inter-Process Communication&#xff09;机制&#xff0c;用于在不…...

大模型智能体核心技术:CoT与ReAct深度解析

**导读&#xff1a;**在当今AI技术快速发展的背景下&#xff0c;大模型的推理能力和可解释性成为业界关注的焦点。本文深入解析了两项核心技术&#xff1a;CoT&#xff08;思维链&#xff09;和ReAct&#xff08;推理与行动&#xff09;&#xff0c;这两种方法正在重新定义大模…...