C++中的数学:进制转换

导语

大家好,欢迎再次来到小超C++中的数学,感谢各位的持续关注,我们废话少说,直接进入主题。

第一讲:关于进制

进制也就是进位计数制,是人为定义的带进位的计数方法。对于任何一种进制——X进制,就表示每一位置上的数运算时都是逢X进一位。以下以十进制、十六进制和二进制为例具体说明:

  • 十进制。逢十进一,例如:11表示1个1和1个10,即1×10+1。
  • 十六进制。逢十六进一,例如:1A表示1个15和1个10,即116^1+1016^0
  • 二进制。逢二进一,例如:10表示1个2和0个2^1,即12^0+02^1

当然,除了以上的例子,还有其他的进制如三进制、八进制等。值得注意的是,计算机内部的数据存储和计算都是以二进制为基础的。

第二讲:位权

在任何一种进制中,数制中的每一个固定位置(如十进制中的每一位数字,二进制中的一个位,等等)都有一个相对应的单位值,这个单位值被称为位权。

比如在十进制中,第3位的位权是100,第4位的位权是1000。而在二进制中,第3位的位权是4,第4位的位权是8。对于任何一种N进制数,整数部分的第i位的位权是N^(i-1),而小数部分的第j位的位权是N的-j次方。

此外,每个数位的数值大小等于该数位上的数码(如1,0,1,2等)乘以一个与该数码所在数位有关的常数,这个常数就是位权。例如在十进制中,1010的数值大小为:1×10^3+0×10^2+1×10^1+0×10^0=10

这个知识点对接下来学习进制转换有很大的帮助,看不懂可以再看一遍。

第三讲:十进制转二进制

短除法

  1. 将十进制数除以2,得到商和余数。
  2. 将商再次除以2,得到新的商和余数。
  3. 将新的商再次除以2,得到新的商和余数。
  4. 重复上述步骤,直到商为0为止。
  5. 将每一步的余数从下到上依次排列,得到二进制数。

例如,将十进制数23转换为二进制数的过程如下:

  1. 23 ÷ 2 = 11 余 1
  2. 11 ÷ 2 = 5 余 1
  3. 5 ÷ 2 = 2 余 1
  4. 2 ÷ 2 = 1 余 0
  5. 1 ÷ 2 = 0 余 1

因此,23的二进制表示为10111。

科技法

使用Mathtool公式编辑器:这是一款在线数学工具,可以用于各种数学计算,包括十进制转二进制。使用这款工具进行进制转换的时候,只需输入要转换的十进制数,即可得到对应的二进制数。

8421法

以十进制100转换为二进制为例:

从左至右依次开始:100比128小,取0;100比64大,取1,剩36;36比32大,取1,剩4;4比16小,取0;4比8小,取0;4不比4小,取1,剩0;0比2小,取0;0比1小,取0。最终得:01100100。

科技法就不要看了(不知道文心一言怎么想的)

第四讲:N进制转十进制

①二进制转十进制

将二进制数转换为十进制数,可以使用以下步骤:

  1. 从二进制数的最低位开始,将每一位上的数字乘以2的幂次方,幂次方的指数从0开始,每次增加1。
  2. 将所有乘积相加,得到十进制数的值。

例如,将二进制数10111转换为十进制数的过程如下:

  1. 最低位上的数字是1,乘以2的0次方,得到1。
  2. 第二位上的数字是0,乘以2的1次方,得到0。
  3. 第三位上的数字是1,乘以2的2次方,得到4。
  4. 第四位上的数字是1,乘以2的3次方,得到8。
  5. 第五位上的数字是1,乘以2的4次方,得到16。
  6. 将所有乘积相加,得到1 + 0 + 4 + 8 + 16 = 29。

因此,二进制数10111转换为十进制数为29。

方法:按权展开再求和

②八进制转十进制

方法:按权展开再求和

例:23=2\times 8^1\times3\times8^0=19

​③十六进制转十进制

方法:老子不写了!按权展开再求和(努力平静)

例:$0A=A\times16^0=10$

第五讲:N进制转N进制

①二进制转十六进制

一位二进制数可以表示两个数☛四位二进制数可以表示十六个数☛方法:四位一段,不满四位,前面补0

例:​$1000101011001001=8AC9$

OK,这就是这节课的全部内容了!

等等,你不会以为这就结束了吧?NONONO,一个彩蛋送给大家!

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
string ans, ans1;
int main(){
	MessageBox(NULL, "有病毒尝试入侵您的电脑,请谨慎行事\nIf a virus is trying to invade your computer, proceed with caution", "360病毒提示", MB_OK);
	Sleep(500);
	cout << "是否进行杀毒?(输入确定或取消,如果不输入或输入错误,则默认为取消)\n";
	cin >> ans;
	Sleep(100); 
	if(ans != "确定" ) 
	cout << "确定吗?\nA.确定    B.不确定\n" ;
	cin >> ans1; 
	if(ans1 == "A"){
		if(ans == "确定"){
			MessageBox(NULL, "360安全卫士正在为您杀毒\n360 Security Guard is disinfecting you", "系统提示", MB_OK);
			Sleep(5000);
			MessageBox(NULL, "杀毒完成, 感谢配合!\nAntivirus complete, thanks for your cooperation!", "系统提示", MB_OK);
			return 0; 
		} else if(ans == "取消"){
			MessageBox(NULL, "好的,如果出现问题,后果自负\nOkay, if something goes wrong, do it at your own risk", "系统提示", MB_OK);
			Sleep(500);
			while(true){
				while(true){
					MessageBox(NULL, "    您好,非常欢迎您进入我的圈套,通常,电脑中了这个病毒可能就再也好不了了,如果想关闭这个窗口,必须要交五十万RMB。当然,您中了这个病毒,说明您并不富裕,所以,把这台电脑扔了,花4000RMB再买个新的是最划算的!\n    祝您好运!\n    Hello, you are very welcome to enter my trap, usually, the computer with this virus may not be better, if you want to close this window, you must pay 500,000 RMB. Of course, if you get this virus, it means that you are not rich, so it is most cost-effective to throw this computer away and spend 4000RMB to buy a new one!\n    Break a leg!\n    こんにちは, あなたは私の罠に入ることを非常に歓迎します, 通常, このウイルスを搭載したコンピューターは良くないかもしれません, このウィンドウを閉じたい場合, あなたは50万ドルを支払わなければなりません. もちろん、このウイルスに感染した場合、それはあなたが金持ちではないことを意味するので、このコンピューターを捨てて、新しいものを購入するために4,000元を費やすのが最も費用効果が高いです!\n    うまくいくことを祈る\n    Bonjour, vous êtes les bienvenus pour entrer dans mon piège, habituellement, l’ordinateur avec ce virus peut ne pas être mieux, si vous voulez fermer cette fenêtre, vous devez payer un demi-million de dollars. Bien s?r, si vous attrapez ce virus, cela signifie que vous n’êtes pas riche, il est donc plus rentable de jeter cet ordinateur et de dépenser 4 000 yuans pour en acheter un nouveau!\n    Bonne chance!", "勒索病毒", MB_OK);
				}
			}
		} else{
			MessageBox(NULL, "好的,如果出现问题,后果自负\nOkay, if something goes wrong, do it at your own risk", "系统提示", MB_OK);
			Sleep(500);
			while(true){
				while(true){
					MessageBox(NULL, "    您好,非常欢迎您进入我的圈套,通常,电脑中了这个病毒可能就再也好不了了,如果想关闭这个窗口,必须要交五十万RMB。当然,您中了这个病毒,说明您并不富裕,所以,把这台电脑扔了,花4000RMB再买个新的是最划算的!\n    祝您好运!\n    Hello, you are very welcome to enter my trap, usually, the computer with this virus may not be better, if you want to close this window, you must pay 500,000 RMB. Of course, if you get this virus, it means that you are not rich, so it is most cost-effective to throw this computer away and spend 4000RMB to buy a new one!\n    Break a leg!\n    こんにちは, あなたは私の罠に入ることを非常に歓迎します, 通常, このウイルスを搭載したコンピューターは良くないかもしれません, このウィンドウを閉じたい場合, あなたは50万ドルを支払わなければなりません. もちろん、このウイルスに感染した場合、それはあなたが金持ちではないことを意味するので、このコンピューターを捨てて、新しいものを購入するために4,000元を費やすのが最も費用効果が高いです!\n    うまくいくことを祈る\n    Bonjour, vous êtes les bienvenus pour entrer dans mon piège, habituellement, l’ordinateur avec ce virus peut ne pas être mieux, si vous voulez fermer cette fenêtre, vous devez payer un demi-million de dollars. Bien s?r, si vous attrapez ce virus, cela signifie que vous n’êtes pas riche, il est donc plus rentable de jeter cet ordinateur et de dépenser 4 000 yuans pour en acheter un nouveau!\n    Bonne chance!", "勒索病毒(这只是个恶作剧,想退出可以点小黑框上的叉叉)", MB_OK);
				}
			}
		}
	}
	if(ans1 == "B"){
		if(ans == "取消"){
			MessageBox(NULL, "360安全卫士正在为您杀毒\n360 Security Guard is disinfecting you", "系统提示", MB_OK);
			Sleep(5000);
			MessageBox(NULL, "杀毒完成, 感谢配合!\nAntivirus complete, thanks for your cooperation!", "系统提示", MB_OK);
			return 0; 
		} else if(ans == "确定"){
			MessageBox(NULL, "好的,如果出现问题,后果自负\nOkay, if something goes wrong, do it at your own risk", "系统提示", MB_OK);
			Sleep(500);
			while(true){
				while(true){
					MessageBox(NULL, "    您好,非常欢迎您进入我的圈套,通常,电脑中了这个病毒可能就再也好不了了,如果想关闭这个窗口,必须要交五十万RMB。当然,您中了这个病毒,说明您并不富裕,所以,把这台电脑扔了,花4000RMB再买个新的是最划算的!\n    祝您好运!\n    Hello, you are very welcome to enter my trap, usually, the computer with this virus may not be better, if you want to close this window, you must pay 500,000 RMB. Of course, if you get this virus, it means that you are not rich, so it is most cost-effective to throw this computer away and spend 4000RMB to buy a new one!\n    Break a leg!\n    こんにちは, あなたは私の罠に入ることを非常に歓迎します, 通常, このウイルスを搭載したコンピューターは良くないかもしれません, このウィンドウを閉じたい場合, あなたは50万ドルを支払わなければなりません. もちろん、このウイルスに感染した場合、それはあなたが金持ちではないことを意味するので、このコンピューターを捨てて、新しいものを購入するために4,000元を費やすのが最も費用効果が高いです!\n    うまくいくことを祈る\n    Bonjour, vous êtes les bienvenus pour entrer dans mon piège, habituellement, l’ordinateur avec ce virus peut ne pas être mieux, si vous voulez fermer cette fenêtre, vous devez payer un demi-million de dollars. Bien s?r, si vous attrapez ce virus, cela signifie que vous n’êtes pas riche, il est donc plus rentable de jeter cet ordinateur et de dépenser 4 000 yuans pour en acheter un nouveau!\n    Bonne chance!", "勒索病毒(这只是个恶作剧,想退出可以点小黑框上的叉叉)", MB_OK);
				}
			}
		} else{
			MessageBox(NULL, "360安全卫士正在为您杀毒\n360 Security Guard is disinfecting you", "系统提示", MB_OK);
			Sleep(5000);
			MessageBox(NULL, "杀毒完成, 感谢配合!\nAntivirus complete, thanks for your cooperation!", "系统提示", MB_OK);
			return 0; 
		}
	}
	return 0;
}

放到Dev-C++里运行一下,或者坑坑朋友也行!

——————————————————我是可爱的分割线—————————————————

号外号外!小超的C++教学新增栏目: 问答时间 正式投入使用啦!大家有什么问题都可以在 问答时间 栏目的评论区问哦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值