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

news2024/11/26 2:27:09

文章目录

  • 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
	//000000000000000000000000000011011
	
	n = n & (~(1 << 4));
	printf("%d\n", n);
	//000000000000000000000000000011011
	//111111111111111111111111111101111    ~(1<<4)
	//000000000000000000000000000001011
	return 0;
}

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

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

相关文章

英飞凌TLF35584规格书中文

官网&#xff1a; 英飞凌TLF35584QVVS2 TLF35584_SPI&#xff1a; 1 Overview2 Block Diagram3 Pin Configuration3.1 Pin Assignment - PG-VQFN-48 4 General Product Characteristics4.1 Absolute Maximum Ratings 绝对最大额定值4.2 Functional Range4.3 Thermal Resistance…

制造业企业设备管理常见的三个问题及对应的解决方案

当今的市场如同茫茫大海&#xff0c;既充满机遇&#xff0c;也伴随着波动的风险。在现代制造业中&#xff0c;企业常常面临着各种挑战&#xff0c;这些挑战可能妨碍其发展和竞争力。但制造企业往往具备能够解决挑战的能力&#xff0c;借助软件工具的力量&#xff0c;可以更好地…

vue3中router和route的区别(使用场景)

1.router router是用来对路由进行操作的&#xff1b; 多用于路由跳转、路由守卫、页面刷新、给路由文件添加路由路径或者移除路由路径等等 2.route route是用来获取路由信息的&#xff1b; 多用于获取路由路径、路由传参数据、路由文件配置的属性信息等等

2000-2022年“宽带Z国“试点城市名单匹配数据

2000-2022年“宽带Z国“试点城市名单匹配数据 1、时间&#xff1a;2000-2022年 2、指标&#xff1a;行政区划代码、年份、地区、所属省份、所属地域、试点城市、最早试点年份、DID 3、来源&#xff1a;来自工信部和国家发改委在2014年、2015年和2016年分别遴选的“宽带中国”…

x86汇编代码学习-计算机工作原理2

文章目录 前言1.mov2.内存分段3.调试5.注释6.标号7.add sub8.inc dec自增&#xff0c;自减9.adc sbb10 乘法栈11 栈寄存器push pop12 jz jnz13 section 16字节对齐14 CALL15 逻辑运算16 启动MBR以外的程序174. 前言 视频教程 x86汇编代码学习-计算机工作原理1 1.mov 因为ah是…

C++ 信息学奥赛 2048:【例5.18】串排序

#include<bits/stdc.h> using namespace std; int main() {string s[25];//string类数组 int n;cin >> n;for(int i 1; i < n; i)cin >> s[i];sort(s1, s1n);//默认升序 调用函数默认排序 for(int i 1; i < n; i)cout << s[i] << endl;…

Python实现Labelme的Json标注文件与YOLO格式的TXT标注文件相互转换

Python实现Labelme的Json标注文件与YOLO格式的TXT标注文件相互转换 前言前提条件相关介绍实验环境Labelme的Json标注文件与YOLO格式的TXT标注文件相互转换convert_labelme_json_to_txtjsons/000000000009.json代码实现输出结果labels/000000000009.txt convert_txt_to_labelme_…

Flink(一)【WordCount 快速入门】

前言 学完了 Hadoop、Spark&#xff0c;本想着先把 Kafka、Flume 这些工具先学完的&#xff0c;但想了想还是把核心的技术先学完最后再去把那些工具学学。 最近心有点累哈哈哈&#xff0c;偷偷立个 flag&#xff0c;反正也没人看&#xff0c;明年的今天来这里还愿哈&#xff0c…

C语言100~200中不能整除3的数

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h> int main() {int n;for (n 100; n < 200; n){if (n%3 0){continue;}printf("%d\n",n);}}

RFC使用与WebService

RFC连接 CSDN RFC中引用类型组 http://t.csdnimg.cn/wQWAYhttp://t.csdnimg.cn/wQWAY 远程目标系统维护SM59 这里的类型指的是目标系统的系统类型(目标系统即rfc函数存在的系统). 类型2&#xff08;R/2连接&#xff09;&#xff0c;只需给出主机名&#xff0c;所有通信信息…

软件系统设计方法和工具介绍

软件系统设计方法和工具介绍 在构建系统时&#xff0c;尤其是一些大项目实施的过程中&#xff0c;可以接触和学习一些高阶层面分析问题和系统架构的方法论&#xff0c; 如麦肯锡的解决问题7步法&#xff1a;定义问题、分解问题、排定优先级、制定工作计划、分析问题、综合分析…

比SAM小60倍的分割一切模型:MobileSAM

1 MobileSAM SAM就是一类处理图像分割任务的通用模型。与以往只能处理某种特定类型图片的图像分割模型不同&#xff0c;SAM可以处理所有类型的图像。 在SAM出现前&#xff0c;基本上所有的图像分割模型都是专有模型。比如&#xff0c;在医学领域&#xff0c;有专门分割核磁图…

Python批量下载ERA5数据

1. ERA5数据简介 ERA5是第五代ECMWF大气再分析全球气候数据(ECMWF)&#xff0c;该数据集的第一部分现在可以公开使用(1979年到3个月内)。ERA5数据提供每小时的大气、陆地和海洋气候变量的估计值&#xff0c;地球数据精确到了30km网格&#xff0c;包括了137层的大气数据。 网址…

【教3妹学编程-算法题】最大单词长度乘积

3妹&#xff1a;哇&#xff0c;今天好冷啊&#xff0c; 不想上班。 2哥&#xff1a;今天气温比昨天低8度&#xff0c;3妹要空厚一点啊。 3妹 : 嗯&#xff0c; 赶紧把我的羽绒服找出来穿上&#xff01; 2哥&#xff1a;哈哈&#xff0c;那倒还不至于&#xff0c; 不过气温骤降&…

使用Anaconda安装TensorFlow环境以及没有搜到的报错的解决方法

1.在官网下载Anaconda 这一步几乎不会有人报错 下稳定的版本 或者最新的版本都可以 2.TensorFlow分两个版本 一个是用cpu跑 另一个是用gpu跑 显而易见 cpu的计算性能已经比不上现在主流的显卡了 所以有独显的电脑尽量安装gpu版本 CPU版本: 先给出cpu版本的安装方法: 打开A…

体坛巨星商业价值完美呈现,B体育等超巨品牌堪称经典案例

近几年&#xff0c;伴随着互联网的发展&#xff0c;我们惊喜的发现体坛巨星的商业代言越来越多&#xff0c;他们代言的广告已经融入到我们的生活之中&#xff0c;陪伴很多人度过了美妙的时刻。越来越多的品牌也意识到&#xff0c;比起娱乐明星&#xff0c;体坛巨星的全球属性对…

EMS员工管理系统 python

python基础练习&#xff0c;简单的增删改查&#xff0c;涉及python基础语法&#xff0c;逻辑、分支结构以及一些基础数据格式的操作&#xff0c;文件操作&#xff0c;思路理解等等 部分代码如下 print(""*20,"欢迎使用员工管理系统",""*20)# em…

浏览器自动播放音视频-前端实现方案

目录 前言 浏览器自动播放策略 策略详情&#xff1a; 实现方案 方案1&#xff1a; 互动后播放 方案2&#xff1a; 互动后出声 总结 前言 在开发中可能有遇到这样的需求&#xff0c;当用户打开页面后&#xff0c;需要自动播放视频或音频&#xff0c;按理说那就打开页面…

Vue2和Vue3生命周期映射关系及异同

生命周期映射关系表 beforeCreate -> 使用 setup() created -> 使用 use setup() beforeMount ->onBeforeMount mounted -> onMounted beforeUpdate -> onBeforeUpdate updated -> onUpdated beforeDestroy-> onBeforeUnmount destroyed ->onUnmounted…