进制与进制转换

文章介绍了进制的基本概念,包括二进制、八进制、十进制和十六进制,以及位权的重要性。在计算机科学中,二进制尤其关键,所有数据最终都以二进制形式存储。进制转换方法包括正数的位权展开法和短除法,以及负数的转换策略。原码、反码和补码在二进制表示中扮演重要角色,尤其是对于负数的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.进制

1.1 进制的概念

在日常生活中,我们会经常听到进制这一说,可所谓的进制到底是什么呢?
进制: 也称为计数制,是一种计数的方法,是用一组固定的符号和统一的规则来表示数值的方法。一般常见的进制有二进制,八进制,十进制与十六进制。
进制中还有一个重要的知识就是位权。
位权:指数制中每一固定位置对应的单位值。例如,在十进制数1234中,1的位权是1000,2的位权是100,3的位权是10,1的位权就是1。
在了解了进制以后,你是否会思考进制有什么用呢?在计算机中,二进制就是特别重要的,因为所有的语言到了计算机这里,就都会转换成二进制来保存。

1.2 进制的表达方式

一般来说,进制的表达方式有两种,一种是形如(10111101)2,(6165)8这样用数字下标表示的,还有一种是用字母的后缀表示的,例如(2AF)H,(11011011001011)B 这样的。

1.3 原码,反码,补码

在计算机的二进制语言中,有着原码,反码,补码。
原码:在一个二进制数前加了一位符号位便是原码。
反码:正数的反码就是原码,而负数的反码就是除符号位之外,全部取反。
补码:正数的补码就是原码,而负数的补码是负数的反码加1。
知道了原码,反码,补码以后又是来干什么的呢?这就要跟进制的转换扯上关系了。

2.进制的转换

2.1 正数的进制转换

2.1.1 其他进制转十进制

如果遇到一个其他进制的数,我们想看得懂,就需要转换成十进制数,可是又该怎么转换呢?答案是用位权展开法。位权展开法,顾名思义,就是一个数每一位所对的数乘上自己对应的位权。
例如,(1010101)2=1 * 26 + 0 * 25 + 1 * 24 + 0 * 23 + 1 * 22 + 0 * 21 + 1 * 20=85
代码如下:

#include <bits/stdc++.h>
using namespace std;

string s;
int ans,jz;

int main(){
	cin>>s>>jz;
	for(int i=0;i<s.size();i++){
		ans+=(s[s.size()-1-i]-'0')*pow(jz,i);
	}
	cout<<ans<<endl;
	return 0;
}

2.1.2 十进制转其他进制

那如果我们遇到一个十进制数,但我们需要转换成其他进制再来储存有该怎么办呢?那就不用位权展开法了,而是用短除法,用那个十进制数除以进制,然后将余数储存,直到除到向下取整商为0时,再将余数倒序输出就行了。
例如:
在这里插入图片描述
代码如下(仅为十进制转二进制):

#include<bits/stdc++.h>
using namespace std;

int d,b,i=1,ans;

int main(){
	cin>>d;
	while(d!=0){
		b = d % 2;
		ans += i*b;
		d /= 2;
		i *= 10;
	}
	cout<<ans<<endl;
}

2.2 负数的进制转换

既然知道了正数的进制转换方法,那就再来看一下负数的转换方法。其实非常简单,就是先把这个负数先把它当成正数,然后算出这个正数的其他进制数,这就是这个负数的原码,然后求出这个原码的补码其实就是这个负数的其他进制数了。而其他进制转十进制就是相反的过程,这里就不过多赘述。

3.总结

在计算机中,二进制是非常重要的,毕竟需要将所有其他进制的数都要转换成二进制。所以我们也需要学会转换,在某些时候,也是会有用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值