不懂进制转换,我连B站追番的权利都没有
这篇文章的确有点标题党了,emmm,不重要,就是这部某站热播的青春校园科幻搞笑无脑番《仙王的日常生活》,让我再一次领会了,不好好学习,连追番都要落后于人。
下面请看经典场面(逆天男主要求将灵力溢出返回NULL的成绩改为175分):
两仪码,两仪,是道教文化,阴阳、男女、黑白、天地、奇偶......
两仪,是道教文化术语,在古典哲学中指的是“阴阳”,主要为黑白双色,乃大道之本。天地初开,一切皆为混沌,是为无极,无极生太极,太极生两仪,两仪为阴阳。《易经》:“易有太极,始生两仪,两仪生四象,四象生八卦。” 两仪在《易经》中指阴(- -)阳(—)。关于“两仪”之说,综合历代易学家的理论,计有八说:一说为阴阳,一说为天地,一说为奇偶,一说为刚柔,一说为玄黄,一说为乾坤,一说为春秋,一说为不变与变。但通常都是指阴阳。天地万物,世间万事,古人概之为:阴阳。阴阳也是天地出分之时,清气向上为天。浊气向下为地。天为阳,地为阴。天地万物,世间万事,古人概之为:阴阳。
那么两仪码到底该是个什么?
乾坤乾坤乾乾乾乾,乾坤,还是道教,天地、日月、阴阳、刚柔......
乾坤是一个汉语词汇,拼音是qián kūn。为道教文化术语,一指《易》的乾卦和坤卦。二指天地。三指日月。四指阴阳;刚柔。五指国家;江山;天下。六指局势,大局。七指帝、后。八指玄虚;花招。在太极八卦中以乾坤为主,乾三连,坤六断,此二卦包罗万象,乃万物之源,一般代表天地,南北,阴阳。先天八卦,是乾坤定南北,坎离定东西,是天南地北为序,上为天为乾,下为地为坤,左为东为离,右为西为坎。乾、坤是先天八卦中的两卦,乾为天,坤为地,乾坤代表天地。
那么乾坤乾坤乾乾乾乾到底该是个什么?
我去,***不就是二进制吗?(动脑子想想,这小编,怕不是道教文化毕业辅修计算机专业。两仪码,就是二进制码,乾是1坤是0,的确符合道教术语解释)。
对不起,我不配,是我拖后腿了......
进制转换,计算机最基础的知识点,早已经被各种各样的计算器和进制转换机封装,方便使用的同时,你是否真的理解并学会了进制转换?离开了计算器和进制转换机,你是否还具有看懂动漫的能力?
进入正题,常见的进制转换一般是在二进制、八进制、十进制、十六进制等的转换。求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
以二进制和十进制的相互转换为例:
在二进制转换为十进制时,需要使用到二进制的每一个字符和二进制的长度,即二进制的每一位字符乘2的(i-1)次方的和为十进制。
程序描述:
将a进制的n(n是字符数组)转换为10进制的数。
int func(int a,char n[]){
int len=strlen(n);
int i,ans=0;
for(i=0;i<len;i++){
//二进制到十进制之间使用的运算规则
if(n[i]>='0'&&n[i]<='9')
ans=ans+pow(a,len-1-i)*(n[i]-'0');
//十进制之后需要增加的运算规则
else if(n[i]>='a'&&n[i]<='z')
ans=ans+pow(a,len-1-i)*(n[i]-'a'+10);
else
ans=ans+pow(a,len-1-i)*(n[i]-'A'+10);
}
return ans;
}
在十进制转换为二进制时,需要对所求的数进行循环取余和取商的操作,直到符合要求,需要注意两点是:
1.当所求值为0时,需要特判;
2.结果需要逆序输出,如上图。
程序描述:
将10进制的ans转换为b进制的数。
void fun(int ans,int b){
char arr[100];
int i,j=0,tmp;
while(ans!=0){
tmp=ans%b;//取出余数
if(tmp>=10)//大于等于十,需要使用字母
arr[j++]=tmp-10+'A';
else//小于十,使用数字
arr[j++]=tmp+'0';
ans=ans/b;
}
//当ans为0,也即j为0,需要特判;
if(j==0)
arr[j++]='0';
//逆序输出
for(i=j-1;i>=0;i--){
printf("%c",arr[i]);
}
}
以上的两个函数结合起来,就可以在任意进制之间的转换。任何的进制都可以先转换到十进制,再由十进制转换为对应的进制(潜移默化的意识);
#include<cstdio>
#include<cstring>
#include<cmath>
const int maxn = 10010;
int func(int a,char n[]){
int len=strlen(n);
int i,ans=0;
for(i=0;i<len;i++){
//二进制到十进制之间使用的运算规则
if(n[i]>='0'&&n[i]<='9')
ans=ans+pow(a,len-1-i)*(n[i]-'0');
//十进制之后需要增加的运算规则
else if(n[i]>='a'&&n[i]<='z')
ans=ans+pow(a,len-1-i)*(n[i]-'a'+10);
else
ans=ans+pow(a,len-1-i)*(n[i]-'A'+10);
}
return ans;
}
void fun(int ans,int b){
char arr[100];
int i,j=0,tmp;
while(ans!=0){
tmp=ans%b;//取出余数
if(tmp>=10)//大于等于十,需要使用字母
arr[j++]=tmp-10+'A';
else//小于十,使用数字
arr[j++]=tmp+'0';
ans=ans/b;
}
//当ans为0,也即j为0,需要特判;
if(j==0)
arr[j++]='0';
//逆序输出
for(i=j-1;i>=0;i--){
printf("%c",arr[i]);
}
}
int main(){
int a,b,x=0;
char n[maxn];
scanf("%d%s%d",&a,n,&b);
x=func(a,n);
fun(x,b);
printf("\n");
return 0;
}
不,还没完,在c++的函数库中,还有一种更加简单的函数,可以直接使用,原谅我把这最简单的不用思考就可以解题的方法留到文末:
C++库函数(strtol()/itoa())进制转换
1.strtol()函数:
作用:将一个任意1-36进制数转化为10进制数,返回是long int型。
long int strtol(const char *str, char **endptr, int base);
把参数 str 所指向的字符串根据给定的 base 转换为一个长整数(类型为 long int 型),base 必须介于 2 和 36(包含)之间,或者是特殊值 0。
函数描述:
long ret = strtol(n,&result,a);
n -- 要转换为长整数的字符串。
result -- 对类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。
a -- 基数,必须介于 2 和 36(包含)之间,或者是特殊值 0。
实例:
输入进制大小和该进制下的数,输出转换成功后对应的十进制数:
#include<cstdio>
#include<cstdlib>
#include<cstring>
const int maxn = 10010;
int main(){
int a;
char n[maxn];
char *result;
scanf("%d%s",&a,n);
long ret = strtol(n,&result,a);
printf("%ld",ret);
return 0;
}
2.itoa()函数:
作用:将一个10进制的数转化为n进制的值、其返回值为char型。(和上面的strtol效果相反)
char* itoa(int val,char* dst,int radix = 10);//定义的时候默认指定10进制
函数描述:
itoa(a,result,b);
a为要转换的数,result用来存储转换结果,b为要转变的进制数。
实例:
输入一个十进制的数和将要转变的进制,输出转换成功后对应的进制数:
#include<cstdio>
#include<cstdlib>
#include<cstring>
const int maxn = 10010;
int main(){
int a,b;
char result[maxn];
scanf("%d%d",&a,&b);
itoa(a,result,b);
printf("%s",result);
return 0;
}
用strtol()函数和itoa()函数也可以很好的解决任意进制之间的转换:
#include<cstdio>
#include<cstdlib>
#include<cstring>
const int maxn = 10010;
int main(){
int a,b;
char n[maxn];
char *result;
scanf("%d%s%d",&a,n,&b);
long ret = strtol(n,&result,a);
itoa(int(ret),n,b);
printf("%s",n);
return 0;
}
来源于:微信公众号【李歘歘】
作者:李歘歘
扫码关注,领取众多粉丝福利,原创文章,联系作者。
不懂进制转换,我连B站追番的权利都没有相关推荐
- 夯实基础——P2084 进制转换
题目链接:https://www.luogu.org/problem/P2084 P2084 进制转换 题目背景 无 题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子 ...
- 超详细进制转换(二进制、八进制、十进制、十六进制)详解
目录 在学习四种进制转换之前先了解一下自种进制的特点 一.整数转换 1.十进制转R进制 2.R进制转十进制 3.二进制转八进制.十六进制 4.八进制转二进制 二.小数转换 1.十进制转R进制 2.R进 ...
- c语言ae16进制转换,进制转换工具下载_16进制2进制转换with曼彻斯特编码 1.3 免费版_极速下载站_软件下载...
16进制2进制转换with曼彻斯特编码是一款简单易用的转换工具,可以对16进制.2进制.曼彻斯特算法.10进制等进行互转,支持802.3曼彻斯特.标准曼彻斯特.差分三种转换模式,支持曼彻斯特编码每8位 ...
- JavaScript实现在线进制转换工具网站 -toolfk程序员在线工具网
本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...
- JavaScript实现在线进制转换工具网站 -toolfk程序员工具网
本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...
- 二进制转四进制计算机,二进制换算(进制转换计算器)
二进制数01011010扩大2倍之后是多少?急求~ 先把它转换成为 10进制 变成90 变180 然后再转换成为2进制 10110100 我看了一下像是一道二进制的题 有谁知道答案帮帮忙 谢谢了 问着 ...
- 进制转换(非常详细+算法代码)
--快开学了,进制转换忘了怎么办? --没事,看这篇博客保你信手拈来 ! --学不会呢? --****我!! 废话不多说,我们进入正题 : 常用的进制范围和其符号修饰: 二进制(B)---->0 ...
- 编程基础知识(变简单的进制转换)
编程基础--进制转换 前言 世界上有10种人,懂二进制的和不懂二进制的. 有同学会问,你说世界上有10种人,为啥只说了两个呢.这里的10可不一定是自然数十,也可能是二进制的一和零,不懂的同 ...
- Qt多功能计算器(三)——进制转换
项目介绍 本篇文章的内容是计算器的第三个功能--进制转换,这个功能相比上一个功能--三角函数的实现略微困难一些.程序的逻辑从理论上说只要修改界面和部分槽函数就可以实现2-36任意进制互相转换,这里只实 ...
最新文章
- iOS开发-编译出错 duplicate symbols for architecture x86_64
- ASP.NET MVC Caching with OutputCache
- java nio的演进_Java接口的防御性API演进
- (九十三)蓝牙的基本使用
- 最近一段时间经历的事情即做事方式的总结
- SpringBoot(13)--- 数据库操作(集成MyBatis)
- Centos 7 环境下,如何使用 Apache 实现 SSL 虚拟主机 双向认证 的详细教程:
- lumion自动保存_Lumion所有快捷键,值得收藏
- matlab与c 混合编程问题,MATLAB与C/C++混合编程的一些总结
- android系统签名一样不,解决Android应用签名和系统不一致的问题
- oa是计算机辅助系统吗,oa是管理系统吗
- 脉冲触发器和边沿触发器的理解(移位寄存器采用边沿触发)
- linux 模拟usb键盘,在Linux下模拟键盘按键
- 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON8 LCD1602液晶显示
- Vue中使用 Aplayer 和 Metingjs 添加音乐插件
- Greedy method and ε-greedy method
- android仿钉钉日程日历,Flutter仿钉钉考勤日历的示例代码
- web前端学习之———互联网与HTML篇
- 串行通信比并行通信的速度更高
- SpringCloud 学习笔记(2 / 3)
热门文章
- vulnhub BIZARRE ADVENTURE: JOESTAR
- 属于db模式缺点的是什么_PBL教学模式的优缺点是什么?
- 在JS中用window location host获取域名
- PHP 保留小数点后几位
- 【php】保留小数点后2位的方法
- C#找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)”
- 查尔姆斯理工计算机教授,瑞典查尔姆斯理工大学Jan Stake教授访问上海微系统所...
- 根据文件夹中的图片数据集生成.txt文件标签
- CocosCreator 集成 Pomelo 教程
- 百度mysql_如何连接百度Mysql_MySQL