[关闭]
@hsj1234 2016-07-14T12:17:09.000000Z 字数 1292 阅读 869

进制转换(初稿)

进制


目的

实现进制之间的转换

具体要求

  1. 实现各种进制之间的转换
  2. 输出结果有字节数要求(即位数不够时,需要在高位补0)
  3. 判断输入是否超过要求字节数所能表示的范围

基础知识

按权相加法(m进制转换为十进制)

m进制数从低位到高位(即从右往左)计算,第0位的权值是m的0次方,第1位的权值是m的1次方,第2位的权值是m的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了。
公式如下:


分别表示m进制的第位的数值
分别表示m进制对应于第位的权值
表示转换结果(十进制)

除数取余法(十进制转换为m进制)

对于整数部分,用被除数反复除以m,除第一次外,每次除以m均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。
对于小数部分,采用连续乘以基数m,并依次取出的整数部分,直至结果的小数部分为0为止。故该法称“乘基取整法”。

流程图

Created with Raphaël 2.1.2Startm进制的 input 和要求的字节数 bytesbytes能表示的范围[0,MAX=1<<8*bytes]input是否在这个范围内input==0End除16取余yesnoyesno

接口(10->16)

string  trans(string input,int bytes)

input代表输入的十进制数字
bytes代表需要输出的字节数要求
该函数返回的是要求字节数的十六进制

具体实现

  1. string trans(string input,int bytes)
  2. {
  3. int input_temp=stoi(input);
  4. int m=2*bytes;//位数
  5. int max=1<<8*bytes;//能表示的最大数值
  6. if (input_temp<0||input_temp>=max)return "error_data";//判断input是否符合要求
  7. string output=string(m--,'0');
  8. //主要用到除16取余法
  9. while(input_temp){
  10. output[m--]=tab[input_temp%16];
  11. input_temp/=16;
  12. }
  13. return output;
  14. }

参考文献

二、八、十、十六进制转换(图解篇)

待办事项

总结

尚待改进 意见

基础知识内容中 文字过多堆砌,影响阅读

语言不够简练明了

代码不够精炼

整体逻辑,效果不够理想

流程图效果不佳

常看专业文档-->加强整体排版,规范用词用图(最好是图文交叉进行.文少图多)

看hihocoder的提示-->学会用伪代码写

看逻辑方面的书籍-->了解和增强逻辑结构

用专业的图形编辑器-->暂时用ProcessOn

链接
hihocoder
ProcessOn

给个赞吧

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注