【二进制转换和与其有关的操作符详解】

文章目录

  • 1.二进制与进制转换
  • 2. 2进制转8、10、16进制
    • 2.1 2进制转10进制
    • 2.2 2进制转8进制
    • 2.3 2进制转16进制
  • 3. 8、10、16进制转2进制
    • 3.1 10进制转2进制
    • 3.2 8进制转2进制
    • 3.3 16进制转2进制
  • 4.原码、反码、补码
  • 5.移位操作符(<< >>)
    • 5.1左移操作符
    • 5.2 右移操作符
  • 6.位操作符(& | ^ ~)
    • 6.1 &
    • 6.2 |
    • 6.3 ^
    • 6.4 ~
  • 7.相关题目

在这里插入图片描述

1.二进制与进制转换

我们经常能听到2进制、8进制、10进制与16进制这样的讲法,那是什么意思呢?其实2进制、8进制、10进制、16进制是数值的不同表示形式而已。
比如:数值12的各种进制表示形式:

122进制:1010
128进制:14
1210进制:12
1216进制:C

我们重点介绍⼀下⼆进制:
⾸先我们还是得从10进制讲起,其实10进制是我们⽣活中经常使⽤的,我们已经形成了很多尝试:

  • 10进制中满10进1
  • 10进制的数字每⼀位都是0~9的数字组成

其实⼆进制也是⼀样的

  • 2进制中满2进1
  • 2进制的数字每⼀位都是0~1的数字组成

2. 2进制转8、10、16进制

2.1 2进制转10进制

其实10进制的123表示的值是⼀百⼆⼗三,为什么是这个值呢?其实10进制的每⼀位是有权重的,10进制的数字从右向左是个位、⼗位、百位…,分别每⼀位的权重是 100 , 101 , 102
如下图:
在这里插入图片描述
2进制和10进制是类似的,只不过2进制的权重,从右往左一次是20,21,22
如果2进制是1101,该怎么理解呢?
如下图:
在这里插入图片描述

2.2 2进制转8进制

8进制的数字每⼀位是0~7的数字,各⾃写成2进制,最多有3个2进制位就⾜够了。
如下:

0的二进制:000
1的二进制:001
2的二进制:010
3的二进制:011
4的二进制;100
5的二进制:101
6的二进制:110
7的二进制:111

所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀个8进制位,剩余不够3个2进制位的直接换算
如:2进制的01101011,换成8进制:0153,0开头的数字,会被当做8进制。
在这里插入图片描述

2.3 2进制转16进制

和2进制转8进制类似
16进制的数字每一位是0-9,A-F的数字,如果每一位写成2进制的形式,最多4个二进制位就足够了。
如下:

0的二进制:0000			8的二进制:1000	
1的二进制:0001			9的二进制:1001
2的二进制:0010			A的二进制:1010
3的二进制:0011			B的二进制:1011
4的二进制;0100			C的二进制:1100
5的二进制:0101			D的二进制:1101
6的二进制:0110			E的二进制:1110
7的二进制:0111			F的二进制:1111

所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算
如:2进制的01101011,换成16进制:0x6b,16进制表⽰的时候前⾯加0x
在这里插入图片描述

3. 8、10、16进制转2进制

3.1 10进制转2进制

  • 方法1:用10进制数除2,记录每次所得余数,如果所得的商不为0就继续除,直到所得商为0为止,所得余数从下往上就是10进制转换出的2进制。如下图:

在这里插入图片描述

  • 方法2:拼凑法。这种方法需要熟记2进制所表示的10进制数。

20=1,21=2,22=4,23=8,24=16,25=32,26= 64,27=128,28=256,29=512,210=1024
例如:125= 64+32+16+8+4+1
所以,123的二进制就可以这样写:1111101
在这里插入图片描述

3.2 8进制转2进制

8进制转2进制,只需要将8进制转换为3位对应的2进制即可
例如:153转换为2进制为01 101 011。
在这里插入图片描述

3.3 16进制转2进制

16进制转2进制,只需要将16进制转换为4位对应的2进制即可
例如:6b转换为2进制为:0110 1011。
在这里插入图片描述

4.原码、反码、补码

  • 整数的2进制有三种表示方法:原码、反码、补码
  • 有符号整数的三种表示方法中均有符号位数值位,2进制序列中,最⾼位的1位是被当做符号位,剩余的都是数值位。
  • 符号位都是⽤0表⽰“正”,⽤1表⽰“负”。
  1. 正整数的原、反、补码都相同,如下

在这里插入图片描述

  1. 负整数的三种表示方法各不相同,变化规则如下:
  • 原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
  • 反码:将原码的符号位不变其他位依次按位取反就可以得到反码。
  • 补码:反码+1就得到补码。

在这里插入图片描述
3. 补码转换为原码

  • 方法1:补码-1,再取反

在这里插入图片描述

  • 方法2:符号位不变,其他位按位取反,再+1

在这里插入图片描述

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

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

5.移位操作符(<< >>)

在内存中,整数都是按补码来存储的,所以我们在对2进制位进行操作时,操作的都是补码,而我们看到的全都是原码
注:移位操作符的操作数只能是整数

5.1左移操作符

移位规则:左边丢弃、右边补0
在这里插入图片描述
在这里插入图片描述

5.2 右移操作符

右移操作符根据不同的编译器,分为 逻辑右移算术右移(大部分编译器为算术右移)

  1. 逻辑右移:左边⽤0填充,右边丢弃
  2. 算术右移:左边⽤原该值的符号位填充,右边丢弃

在这里插入图片描述

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

注意:对于移位运算符,不要移动负数位,这个是标准未定义的。

6.位操作符(& | ^ ~)

它们的操作数也必须是整数

6.1 &

按位与原则:对应的二进制位进行运算,都为1才是1,否则为0
在这里插入图片描述

6.2 |

按位或原则:对应二进制进行运算,只要有1就为1,都为0才是0
在这里插入图片描述

6.3 ^

按位异或的原则:相同为0,相异为1。
在这里插入图片描述

6.4 ~

按位取反原则:所有位直接取反
在这里插入图片描述

7.相关题目

  1. 不能创建临时变量(第三个变量),实现两个数的交换

首先要明白一点:0^0=0 a^0=a; a^a=0 即:一个数和0异或是它本身,两个相同的数异或是0

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

在这里插入图片描述

  1. 求⼀个整数存储在内存中的⼆进制中1的个数

方法1:与1按位与不等于

a & 1 = 1;a的二进制位的最低位是1
a & 1 = 0; a的二进制位的最低位不是1

int main()
{//00000000000000000000000000000001   1//10000000000000000000000000000001   -1//11111111111111111111111111111110  -1反码//11111111111111111111111111111111   -1补码//00000000000000000000000000000001//00000000000000000000000000000001//n 的二进制位的最低位&1,如果结果是1,那么就说明最低位是1//所以,我们要想办法让1动起来int n = 0;scanf("%d", &n);int count = 0;for (int i = 0; i < 32; i++){if ((n & (1 << i)) != 0 ){count++;}}printf("%d\n", count);return 0;
}

方法2:基于公式 n = n & (n-1)

int main()
{int n = 0;scanf("%d", &n);int count = 0;while (n){n = n & (n - 1);count++;}printf("%d\n", count);return 0;
}
  1. 编写代码将13⼆进制序列的第5位修改为1,然后再改回0
int main()
{int n = 13;n = n | (1 << 4);printf("%d\n", n);//000000000000000000000000000001011//000000000000000000000000000010000   1<<4//000000000000000000000000000011011n = n & (~(1 << 4));printf("%d\n", n);//000000000000000000000000000011011//111111111111111111111111111101111    ~(1<<4)//000000000000000000000000000001011return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【IDEA】在工具栏设置快速创建包和类的图表

页面效果&#xff1a; 操作步骤&#xff1a; 设置 --> 外观与行为 --> 菜单与工具栏 --> 点击 主工具栏 --> 点击 ---- --> 点击 号 --> 添加操作 主菜单 --> 文件 --> 文件打开操作 --> 打开项目操作 --> 新建 --> 往下找 找到 clas…

超声波俱乐部分享:百度世界大会点燃AI创业者新希望

10月22日&#xff0c;2023年第十三期超声波俱乐部内部分享会在北京望京举行。本期的主题是&#xff1a;百度世界大会点燃AI创业者新希望。 到场的嘉宾有&#xff1a;超声波创始人杨子超&#xff0c;超声波联合创始人、和牛商业创始人刘思雨&#xff0c;中国国际经济交流中心研…

开启AWS的ubuntu服务器的root用户登录权限

设置root用户密码 输入以下命令修改root用户密码 sudo passwd root输入以下命令切换到root用户 su root仅允许root用户用密码登录 输入以下命令编辑ssh配置文件 vi /etc/ssh/sshd_config新增以下配置允许root用户登录 PermitRootLogin yes把PasswordAuthentication修改为…

成员变量为动态数据时不可轻易使用

问题描述 业务验收阶段&#xff0c;遇到了一个由于成员变量导致的线程问题 有一个kafka切面&#xff0c;用来处理某些功能在调用前后的发送消息&#xff0c;资产类型type是成员变量定义&#xff1b; 资产1类型推送消息是以zichan1为节点&#xff1b;资产2类型推送消息是以zi…

2023-11-06今日最大收获:坑爹的 JpaRepository!

1.坑爹的 JpaRepository&#xff01; org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet 2023-11-06 18:38:53.12…

报错Could not resolve placeholder ‘driver‘ in value “${driver}“

这是我的报错&#xff1a; 原因是我的applicationContext.xml文件加载properties文件径错误&#xff1a; 应该把路径改成这样就可以了&#xff1a;

ansible安装和常见模块

文章目录 ansible的安装1.1 yum install epel-release.noarch1.2配置epel源的baseurl1.3安装ansible1.4安装ansible报错问题1.5 yum卸载 ansible的安装 ansible是由epel源提供的&#xff0c;所以需要配置epel源。要么通过配置好的baseos源直接执行“yum install epel-release.…

数据分析案例-基于服饰行业中消费者行为和购物习惯的可视化分析(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

JavaScript设计模式之发布-订阅模式

发布者和订阅者完全解耦&#xff08;通过消息队列进行通信&#xff09; 适用场景&#xff1a;功能模块间进行通信&#xff0c;如Vue的事件总线。 ES6实现方式&#xff1a; class eventManager {constructor() {this.eventList {};}on(eventName, callback) {if (this.eventL…

微型导轨在医疗设备中起什么作用?

微型导轨因其高精度、小型化和轻量化的特点&#xff0c;被广泛应用于各种需要高精度和小型化的机器中&#xff0c;如数控机床、工业机器人、光学仪器、医疗设备和自动化设备等&#xff0c;尤其是医疗领域&#xff0c;其应用最为广泛。 1、手术机器人&#xff1a;手术机器人是医…

虚拟列表方案实现

虚拟列表 长列表优化的2种思路&#xff1a; 分片渲染只渲染可视区域 基本概念 进程&#xff1a;这个概念比较大。每开一个应用程序都会分配一个独立的进程&#xff0c;等于每个应用都是一个进程(当然也有一个应用有很多进程)&#xff0c;进程是一个更大的概念&#xff0c;一个进…

干货丨Linux终端常见用法总结(收藏)

一、前言 熟悉Linux终端的基础用法和常见技巧可以极大提高运维及开发人员的工作效率&#xff0c;笔者结合自身学习实践&#xff0c;总结以下终端用法供同行交流学习。 二、常见用法 1.快捷键 1.1.Alt. 在光标位置插入上一次执行命令的最后一个参数。 1.2.CtrlR 模糊搜索历…

计讯物联高精度GNSS接收机:担当小型水库大坝安全监测解决方案的“护航者”

应用背景 水库大坝作为水利工程建筑物&#xff0c;承担着灌溉、发电、供水、生态等重任。一旦水库大坝发生安全事故&#xff0c;后果将不堪设想。因此&#xff0c;水库大坝的安全监测对保障水利工程顺利运行具有重要意义。 计讯物联作为水利行业专家型企业&#xff0c;多年来…

mysql之备份和恢复

&#xff08;一&#xff09;备份 1、备份的种类 &#xff08;1&#xff09;完全备份&#xff1a;将整个数据库完整的进行备份 &#xff08;2&#xff09;增量备份&#xff1a;在完全备份的基础上&#xff0c;对后续新增的内容进行备份 2、备份的需求 &#xff08;1&#x…

[pytorch]手动构建一个神经网络并且训练

0.写在前面 上一篇博客全都是说明类型的,实际代码能不能跑起来两说,谨慎观看.本文中直接使用fashions数据实现softmax的简单训练并且完成结果输出.实现一个预测并且观测到输出结果. 并且更重要的是,在这里对一些训练的过程,数据的形式,以及我们在softmax中主要做什么以及怎么…

Spring Boot中解决跨域问题(CORS)

1. 跨域介绍 首先解释什么是跨域&#xff0c;跨域就是前端和后端的端口号不同&#xff1b;会产生跨域问题&#xff0c;这里浏览器的保护机制&#xff08;同源策略&#xff09;。 同源策略&#xff1a;前端和后端的协议、域名、端口号三者都相同叫做同源。 我们看一下不同源&am…

【k8s】pod调度——亲和,反亲和,污点,容忍

官方网址&#xff1a;https://kubernetes.io/zh/docs/concepts/scheduling-eviction/assign-pod-node/ 一、亲和性 &#xff08;1&#xff09;节点亲和性 pod.spec.nodeAffinity ●preferredDuringSchedulingIgnoredDuringExecution&#xff1a;软策略 p开头 ●requiredDuri…

【ARM AMBA AXI 入门 12 -- AXI协议中的 WLAST 与 RLAST】

文章目录 AXI协议中的 WLAST 与 RLAST AXI协议中的 WLAST 与 RLAST AMBA AXI协议是由ARM公司定义的一种高性能&#xff0c;高频率的总线协议。总线协议中的 WLAST 信号是一个重要的信号&#xff0c;它在 AXI 协议中用来标识一个突发&#xff08;Burst&#xff09;传输的最后一…

Azure 机器学习 - 使用 ONNX 对来自 AutoML 的计算机视觉模型进行预测

目录 一、环境准备二、下载 ONNX 模型文件2.1 Azure 机器学习工作室2.2 Azure 机器学习 Python SDK2.3 生成模型进行批量评分多类图像分类 三、加载标签和 ONNX 模型文件四、获取 ONNX 模型的预期输入和输出详细信息ONNX 模型的预期输入和输出格式多类图像分类 多类图像分类输入…

01-基于IDEA,Spring官网,阿里云官网,手动四种方式创建SpringBoot工程

快速上手SpringBoot SpringBoot技术由Pivotal团队研发制作&#xff0c;功能的话简单概括就是加速Spring程序初始搭建过程和Spring程序的开发过程的开发 最基本的Spring程序至少有一个配置文件或配置类用来描述Spring的配置信息现在企业级开发使用Spring大部分情况下是做web开…