这篇文章的确有点标题党了,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站追番的权利都没有相关推荐

  1. 夯实基础——P2084 进制转换

    题目链接:https://www.luogu.org/problem/P2084 P2084 进制转换 题目背景 无 题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子 ...

  2. 超详细进制转换(二进制、八进制、十进制、十六进制)详解

    目录 在学习四种进制转换之前先了解一下自种进制的特点 一.整数转换 1.十进制转R进制 2.R进制转十进制 3.二进制转八进制.十六进制 4.八进制转二进制 二.小数转换 1.十进制转R进制 2.R进 ...

  3. c语言ae16进制转换,进制转换工具下载_16进制2进制转换with曼彻斯特编码 1.3 免费版_极速下载站_软件下载...

    16进制2进制转换with曼彻斯特编码是一款简单易用的转换工具,可以对16进制.2进制.曼彻斯特算法.10进制等进行互转,支持802.3曼彻斯特.标准曼彻斯特.差分三种转换模式,支持曼彻斯特编码每8位 ...

  4. JavaScript实现在线进制转换工具网站 -toolfk程序员在线工具网

    本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...

  5. JavaScript实现在线进制转换工具网站 -toolfk程序员工具网

    本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...

  6. 二进制转四进制计算机,二进制换算(进制转换计算器)

    二进制数01011010扩大2倍之后是多少?急求~ 先把它转换成为 10进制 变成90 变180 然后再转换成为2进制 10110100 我看了一下像是一道二进制的题 有谁知道答案帮帮忙 谢谢了 问着 ...

  7. 进制转换(非常详细+算法代码)

    --快开学了,进制转换忘了怎么办? --没事,看这篇博客保你信手拈来 ! --学不会呢? --****我!! 废话不多说,我们进入正题 : 常用的进制范围和其符号修饰: 二进制(B)---->0 ...

  8. 编程基础知识(变简单的进制转换)

    编程基础--进制转换 前言    世界上有10种人,懂二进制的和不懂二进制的.    有同学会问,你说世界上有10种人,为啥只说了两个呢.这里的10可不一定是自然数十,也可能是二进制的一和零,不懂的同 ...

  9. Qt多功能计算器(三)——进制转换

    项目介绍 本篇文章的内容是计算器的第三个功能--进制转换,这个功能相比上一个功能--三角函数的实现略微困难一些.程序的逻辑从理论上说只要修改界面和部分槽函数就可以实现2-36任意进制互相转换,这里只实 ...

最新文章

  1. iOS开发-编译出错 duplicate symbols for architecture x86_64
  2. ASP.NET MVC Caching with OutputCache
  3. java nio的演进_Java接口的防御性API演进
  4. (九十三)蓝牙的基本使用
  5. 最近一段时间经历的事情即做事方式的总结
  6. SpringBoot(13)--- 数据库操作(集成MyBatis)
  7. Centos 7 环境下,如何使用 Apache 实现 SSL 虚拟主机 双向认证 的详细教程:
  8. lumion自动保存_Lumion所有快捷键,值得收藏
  9. matlab与c 混合编程问题,MATLAB与C/C++混合编程的一些总结
  10. android系统签名一样不,解决Android应用签名和系统不一致的问题
  11. oa是计算机辅助系统吗,oa是管理系统吗
  12. 脉冲触发器和边沿触发器的理解(移位寄存器采用边沿触发)
  13. linux 模拟usb键盘,在Linux下模拟键盘按键
  14. 【小月电子】ALTERA FPGA开发板系统学习教程-LESSON8 LCD1602液晶显示
  15. Vue中使用 Aplayer 和 Metingjs 添加音乐插件
  16. Greedy method and ε-greedy method
  17. android仿钉钉日程日历,Flutter仿钉钉考勤日历的示例代码
  18. web前端学习之———互联网与HTML篇
  19. 串行通信比并行通信的速度更高
  20. SpringCloud 学习笔记(2 / 3)

热门文章

  1. vulnhub BIZARRE ADVENTURE: JOESTAR
  2. 属于db模式缺点的是什么_PBL教学模式的优缺点是什么?
  3. 在JS中用window location host获取域名
  4. PHP 保留小数点后几位
  5. 【php】保留小数点后2位的方法
  6. C#找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)”
  7. 查尔姆斯理工计算机教授,瑞典查尔姆斯理工大学Jan Stake教授访问上海微系统所...
  8. 根据文件夹中的图片数据集生成.txt文件标签
  9. CocosCreator 集成 Pomelo 教程
  10. 百度mysql_如何连接百度Mysql_MySQL