武器大师——操作符详解(上)

目录

一、操作符的分类

二、二进制和进制转换

2.1.二进制与十进制的互相转化

2.1.1  二进制转十进制

2.1.2  十进制转二进制

 ​编辑

 2.2.二进制转8进制和16进制

2.2.1  转8进制

2.2.2  转16进制

三、原码、反码、补码

四、移位操作符

4.1.左移操作符(<<)

4.2.右移操作符(>>)

五、位操作符

5.1.按位与(&)

5.2.按位或(|)

5.3.按位异或(^)

5.4.按位取反(~)


一、操作符的分类

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

上述操作符,我们在之前的学习中,已经了解了许多,比如说算数操作符、赋值操作符、逻辑操作符、条件操作符(三目)以及部分的单目操作符。这篇文章,白刘将带领大家继续学习一部分。由于本篇文章要介绍的操作符跟二进制有关系,所以我们先来简单介绍一下二进制以及进制转换。

二、二进制和进制转换

我们经常能听到各种进制,像我们数学中十进制,时间的60进制,内存的1024进制......不管是什么进制,他们其实只是数值的表达方式不同而已。

在这里我们着重介绍二进制:

首先我们在生活中最最熟知的是十进制,所以我们从十进制入手。

我们可以观察到,十进制是逢十进一,那可以推断,二进制就是逢二进一。十进制中存在0~9十个数字,那二进制同样也存在0~1共两个数字。

2.1.二进制与十进制的互相转化

2.1.1  二进制转十进制

首先我们还是观察十进制,随机举个例子,123,为什么叫一百二十三呢?这是因为每一位是有权重的,我们位是从右向左依次升高的:个位、十位、百位......,每一位分别代表的权重是10º , 10¹ , 10² ......

如图所示:

而我们说二进制和十进制类似,只不过权重不同,二进制从右到左依次是:2º、2¹、2²...

那我们来试一试,二进制中1101怎么理解呢?

如图:

在二进制转十进制时,我们往往要记忆一些2的次方数,如8,16,32,64,128...,这些数字方便我们转换。我们可以通过看是第几位,然后换成次方数,再求和,熟练掌握,我们就能很快地换算。

2.1.2  十进制转二进制
 

我们可以将一个十进制数一直除二,看它的余数。

 2.2.二进制转8进制和16进制

2.2.1  转8进制

首先介绍一下八进制,顾名思义,逢八进一,和十进制不同,八进制有个特点,由于8是2的三次方,所以这里提供一种特别的方式来进行转换:

我们将二进制数每三位分成一位,然后将每一位换算成0~7的数字,如上图,011就换成了3,101换成了5,前面不够三位,也是直接换,01换成1。所以二进制数01101011,换成八进制就是0153。

注意,八进制数前面要加上0,代表其为八进制数。

2.2.2  转16进制

16为2的4次方,依据刚刚八进制的转换,相信大家能猜到16进制怎么换了——分四位。

而有人问了,我认识的数字最多就0~9,剩下的不够怎么办。

我们在十六进制中,用a表示10,b表示11...,一直到f表示15。

注意,十六进制数前面要加上0x。所以上述二进制数01101011,换成十六进制就是0x6b。 

三、原码、反码、补码

整数的二进制表示方法一共有三种:原码、反码、补码。

有符号整形的三种表示方法都分为两个部分:符号位和数值位。其中符号位为最高的一位,它以1表示负,0表示正。

正整数的原反补都相同。

而负整数则需要计算。

原码:直接将数值按照正负数的形式转换为二进制得到的就是原码。

反码:原码的符号位不变,其它位均取反即可得到反码。(取反就是0变成1,1变成0)。

补码:反码+1就是补码。

补码变到原码有两种方式:

1.先减一再取反     2.先取反再加一

对于整形来说,数据存放内存中的其实是补码。

 

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

前面铺垫了这么多,接下来终于可以开始正题了,我们开始介绍操作符。

四、移位操作符

 移位操作符分为左移操作符(<<)右移操作符(>>)。这里要注意的是,我们使用移位操作符只能操作整数。

4.1.左移操作符(<<)

操作规则:左边抛弃,右边补0

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

运行结果:

4.2.右移操作符(>>)

操作规则:右移运算分两种,逻辑右移和算数右移,这个是根据编译器来决定的,大部分通常是算数右移

1.逻辑右移,左边填0,右边丢弃

2.算数右移,左边用原符号位填充,右边丢弃

 对于移位操作符,不要移动负数位,因为这个属于标准未定义。

int num = 10;
num>>-1;//error

五、位操作符

位操作符一共有四个:

1. &   // 按位与

2. |    // 按位或

3. ^   // 按位异或

4. ~   // 按位取反

所有位操作符所操作的都是补码 

5.1.按位与(&)

口诀: 见0为0,同1为1

00000000000000000000000000000011 3的补码10000000000000000000000000000101 -5的原码
11111111111111111111111111111010 -5的反码
11111111111111111111111111111011 -5的补码00000000000000000000000000000011
11111111111111111111111111111011  见0为0,同1为1
00000000000000000000000000000011 补码所以3 & -5的结果为3

5.2.按位或(|)

口诀: 同0为0,见1为1

00000000000000000000000000000011 3的补码10000000000000000000000000000101 -5的原码
11111111111111111111111111111010 -5的反码
11111111111111111111111111111011 -5的补码00000000000000000000000000000011
11111111111111111111111111111011  同0为0,见1为1
11111111111111111111111111111011 补码
10000000000000000000000000000100 取反
10000000000000000000000000000101 加一所以3 | -5的结果为-5

5.3.按位异或(^)

口诀:相同为0,不同为1

00000000000000000000000000000011 3的补码10000000000000000000000000000101 -5的原码
11111111111111111111111111111010 -5的反码
11111111111111111111111111111011 -5的补码00000000000000000000000000000011
11111111111111111111111111111011  相同为0,不同为1
11111111111111111111111111111000  补码
10000000000000000000000000000111  取反
10000000000000000000000000001000  加一所以3 ^ -5的结果为-8

5.4.按位取反(~)

没啥口诀,顾名思义即可。

int a = 0;
int b = ~a;00000000000000000000000000000000  a的补码
11111111111111111111111111111111  按位取反,得到补码
10000000000000000000000000000000  取反
10000000000000000000000000000001  加一故b的值为-1

未完待续...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2814803.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】linux内核netdev_start_xmit函数

一、中文注释 static inline netdev_tx_t netdev_start_xmit(struct sk_buff *skb, struct net_device *dev, struct netdev_queue *txq, bool more) {// 获取网络设备操作集合const struct net_device_ops *ops dev->netdev_ops;int rc;// 调用实际发送数据包的函数&…

【UE 材质】水晶材质

效果 步骤 1. 先在Quixel Bridge上下载冰纹理 2. 新建一个材质&#xff0c;这里命名为“M_Ice”并打开&#xff0c;添加如下纹理采样节点 继续添加如下节点 此时效果如下&#xff1a; 可以看到此时的材质颜色比较浅&#xff0c;如果希望颜色深一点可以继续添加如下节点 此时效…

基于springboot+vue的大学城水电管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

Leetcoder Day25| 回溯part05:子集+排列

491.递增子序列 给定一个整型数组, 你的任务是找到所有该数组的递增子序列&#xff0c;递增子序列的长度至少是2。 示例: 输入:[4, 7, 6, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [6, 7], [7,7], [4,7,7]] 说明: 给定数组的长度不会超过15。数组中的整数范围是 [-100,100]。给定数…

智慧物流之道:数据可视化引领全局监控

在智慧物流的背景下&#xff0c;数据可视化催生了物流管理的全新范式。首先&#xff0c;通过数据可视化&#xff0c;物流企业可以实现对整个供应链的全景式监控。下面我就可以可视化从业者的角度&#xff0c;简单聊聊这个话题。 首先&#xff0c;图表和地图的直观展示使决策者能…

前后端项目-part03

文章目录 5.4.4 机构名称5.4.4.1 创建实体类Company5.4.4.2 创建实体类CompanyMapper5.4.4.3 创建实体类CompanyService5.4.4.4 创建实体类CompanyController5.4.4.5 后端测试5.4.4.6 修改basic.js5.4.4.7 修改course.vue5.4.4.8 测试5.4.5 课程标签5.4.5.1 效果5.4.5.2 修改co…

用html实现一个简易的百度热榜

用html实现一个简易的百度热榜 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document…

轻松统一图片格式,提升工作效率,高效管理不同格式图片

在数字创意的海洋中&#xff0c;图片是最具表现力的元素之一。但你是否曾因不同格式的图片而头疼&#xff1f;格式不统一&#xff0c;不仅影响管理效率&#xff0c;还可能影响作品的最终呈现效果。今天&#xff0c;我们为您带来了一款高效、便捷的图片批量转换工具&#xff0c;…

【Simulink系列】——Simulink子系统子系统封装模块库技术

声明&#xff1a;本系列博客参考有关专业书籍&#xff0c;截图均为自己实操&#xff0c;仅供交流学习&#xff01; 引入 前面对于简单的动态系统仿真&#xff0c;可以直接建立模型&#xff0c;然后仿真。但是对于复杂的系统&#xff0c;直接建立系统会显得杂乱无章&#xff0…

C语言 int和unsigned int逻辑比较

文章目录 测试1、测试 CMP (int,int)2、测试 CMP (int ,unsigned int)3、测试 CMP (unsigned int ,unsigned int)4、测试 CMP(int ,常量&#xff09; 总结 测试 在IAR(8.40.2)平台下测试单片机为STM32F103ZET6 1、测试 CMP (int,int) //a -2,b 3 int test_fun(int a, int…

二次供水物联网:HiWoo Cloud助力城市水务管理升级

随着城市化的快速推进&#xff0c;二次供水系统作为城市基础设施的重要组成部分&#xff0c;其稳定运行和高效管理显得至关重要。然而&#xff0c;传统的二次供水管理方式在应对复杂多变的城市供水需求时&#xff0c;显得力不从心。为了破解这一难题&#xff0c;HiWoo Cloud平台…

StarRocks实战——携程酒店实时数仓

目录 一、实时数仓 二、实时数仓架构介绍 2.1 Lambda架构 2.2 Kappa架构 三、携程酒店实时数仓架构 3.1 架构选型 3.2 实时计算引擎选型 3.3 OLAP选型 四、携程酒店实时订单 4.1 数据源 4.2 ETL数据处理 4.3 应用效果 4.4 总结 原文大佬的这篇实时数仓建设案例有借…

龙蜥OS 尝试

> 尝试一下龙蜥OS&#xff0c;和Centos8应该没什么区别。 阿里云版本龙蜥 https://alinux3.oss-cn-hangzhou.aliyuncs.com/aliyun_3_x64_20G_nocloud_alibase_20230727.vhd Index of /anolis/8.8/isos/GA/x86_64/ (openanolis.cn) 网卡 我在虚拟机上安装完后&#xff0c;…

Spring常见面试题知识点总结(二)

4. 面向切面编程&#xff08;AOP&#xff09;&#xff1a; AOP的基本概念。 AOP&#xff08;Aspect-Oriented Programming&#xff0c;面向切面编程&#xff09;是一种编程范式&#xff0c;旨在通过切面&#xff08;Aspect&#xff09;将横切关注点与核心业务逻辑分离&#x…

Chondrex--Mouse Anti-OVA IgG1 Antibody Assay Kit

卵清蛋白&#xff08;ovalbumin, OVA&#xff09;是鸡蛋清中的主要蛋白成分&#xff0c;是一种大而复杂的糖蛋白&#xff0c;能够引起机体适度的免疫性&#xff0c;常用作各种免疫学研究的抗原。OVA已被用于诱导IgE介导的疾病&#xff0c;评估疫苗递送方法&#xff0c;以及通过…

动态规划|【斐波那契数列模型 】|面试题08.01三步问题

目录 题目 思路 普通思路 动态规划思路 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 代码 空间优化 题目 题目链接 面试题 08.01. 三步问题https://leetcode.cn/problems/three-steps-problem-lcci/ 三步问题。有个小孩正在上楼梯&#xff0c;楼梯有n…

springboot-基础-添加model和controller的简单例子+常用注解含义

备份笔记。所有代码都是2019年测试通过的&#xff0c;如有问题请自行搜索解决&#xff01; 上一篇&#xff1a;springboot-基础-eclipse配置helloword示例 目录 添加model和controller的例子注解开发使用RestController 大坑 Model ModelMap和ModelAndView的区别 添加model和c…

ubuntu常见配置

ubuntu各个版本的安装过程大差小不差&#xff0c;可以参考&#xff0c;ubuntu20.04 其它版本换一下镜像版本即可 安装之后需要配置基本的环境&#xff0c;我的话大概就以下内容&#xff0c;后续可能有所删改 sudo apt-get update sudo apt-get install gcc sudo apt-get inst…

流模型 Flow 超详解,基于 Flow 的生成式模型,从思路到基础到公式推导到模型理解与应用(Flow-based Generative Model)

参考文献&#xff1a; [1] Dinh L, Krueger D, Bengio Y. Nice: Non-linear independent components estimation[J]. arXiv preprint arXiv:1410.8516, 2014. [2] Dinh L, Sohl-Dickstein J, Bengio S. Density estimation using real nvp[J]. arXiv preprint arXiv:1605.08803…

测试开发(6)软件测试教程——自动化测试selenium(自动化测试介绍、如何实施、Selenium介绍 、Selenium相关的API)

接上次博客&#xff1a;测试开发&#xff08;5&#xff09;测试分类标准 &#xff1a;按测试对像划分、按是否查看代码划分、按开发阶段划分、按测试实施组织、按是否运行划分、按是否手工划分、按测试地域划分-CSDN博客 目录​​​​​​​ 什么是自动化测试 自动化测试介绍…