博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#进制转换
阅读量:5171 次
发布时间:2019-06-13

本文共 3008 字,大约阅读时间需要 10 分钟。

上篇文章学习了微博短URL地址的原理,但还残留了两个问题 :进制转换和位运算   所以这篇文章解决进制转换的问题.

/以下内容来源于网络

二进制 转十进制

(1)二进制转十进制 

  方法:“按权展开求和” 

  例: (1011.01)2 =(1×2^3+0×2^2+1×2^1+1×2^0+0×2^(-1)+1×2^(-2) )10 

  =(8+0+2+1+0+0.25)10 

  =(11.25)10 

  规律:个位上的数字的次数是0,十位上的数字的次数是1,......,依次递增,而十分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。

(2)十进制转二进制

 十进制整数转二进制数:“除以2取余,逆序排列”(除二取) 

  例: (89)10 =(1011001)2

  89÷2 ……1

  44÷2 ……0

  22÷2 ……0 

  11÷2 ……1 

  5÷2 ……1 

  2÷2 ……0 

  1 

  · 十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法)

//八进制转十进制

//知识普及:八进制逢八进一,基数为八,基本符号:0、1、2、3、4、5、6、7。位权8∧i。表示符号:O

例:将12.6转换成 

  (12.6)8 = 1×8^1 + 2×8^0 + 6×8^-1 = (10.75)10

//十进制转八进制

  方法1:采用除8取余法。 

  例:将十进制数115转化为八进制数

  8| 115…… 3 

  8| 14 …… 6

  8| 1 …… 1 

  结果:(115)10 = (163)8

//十六进制转十进

知识普及:它由0-9,A-F,组成。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0---(N-1)的数表示超过9的用字母A-F。

十进制转十六进制

  采余数定理分解,例如将487710转成十六进制:

     487710÷16=30481....14(e) 

  30481÷16=1905....1 

  1905÷16=119....1 

  119÷16=7....7 

  7÷16=0....7 

  这样就计到487710=7711E

    十六进制转十进制与二,八进制转十进制同理。

以上内容来源于网络

  不管是二进制,八进制,十六进制转十进制都是根据 位置数上的值*自身进制的位置数的次方

   十进制转二,八,十六进制为 采用除[进制]取余法

   根据结论,写出方法如下的代码:

  

///         /// 十进制数转换成二、八、十六进制数        ///         /// 十进制数        /// 进制        /// 
public static string IntToHex(int int_value, int mod) { string hex_value = string.Empty; int add_value, mod_value, temp; char char_mod_value; temp = int_value; while (temp > 0) { add_value = temp / mod; mod_value = temp % mod; if (mod_value >= 10) { char_mod_value = (char)(mod_value + 55); } else { char_mod_value = (char)(mod_value + 48); } hex_value = char_mod_value + hex_value; temp = add_value; } return hex_value; }

  

///         /// 非十进制数转换成十进制        ///         /// 非十进制数        /// 模        /// 
十进制数
public static int HexToInt(string hex_value, int mod) { int value = 0; for (int i = 0; i < hex_value.Length; i++) { int asc = Convert.ToInt32(hex_value[i]); if (asc >= 65) { value = value + Convert.ToInt32((asc - 55) * System.Math.Pow(Convert.ToDouble(mod), Convert.ToDouble(hex_value.Length - i - 1))); } else { value = value + Convert.ToInt32((asc - 48) * System.Math.Pow(Convert.ToDouble(mod), Convert.ToDouble(hex_value.Length - i - 1))); } } return value; }

  

实际上在C#中还有更简单的方法:

Convert.ToString(int value,int toBase); 十进制转二,八,十六进制 如:

Convert.ToString(123,2);

Convert.ToString(123,8);

Convert.ToString(123,16);

相反则

Convert.ToInt32("10101010110100001",10);

Convert.ToInt32("127623365634",10);

Convert.ToInt32("23E46D76810AB",10);

本来有进制中小数转换的 , 发现不通用就没上写。

转载于:https://www.cnblogs.com/zhanghonjiang2011/archive/2012/07/02/2573882.html

你可能感兴趣的文章
zabbix 二 zabbix agent 客户端
查看>>
大数据分析中,有哪些常见的大数据分析模型?
查看>>
如何防止Arp攻击
查看>>
ClassList 标签的用法
查看>>
小细节:Java中split()中的特殊分隔符 小数点
查看>>
【编程思想】【设计模式】【行为模式Behavioral】中介者模式Mediator
查看>>
后端接口时间戳或者随机数的作用
查看>>
tomcat docBase 和 path
查看>>
java默认语法、EL、JSTL表达式,JSTL和struts Tag标签的使用总结
查看>>
Vue笔记:使用 axios 发送请求
查看>>
富文本编辑器 - RichEditor
查看>>
java webcontroller访问时报415错误
查看>>
qcow2、raw、vmdk等镜像格式
查看>>
Jzoj5455【NOIP2017提高A组冲刺11.6】拆网线
查看>>
特定字符序列的判断(1028)
查看>>
华为面试
查看>>
平衡二叉树(AVL Tree)
查看>>
【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
查看>>
【CF799E】Aquarium decoration 线段树
查看>>
大运飞天 鲲鹏展翅
查看>>