dotNETcsharp

C# Learning:进制转换

2020-02-14  本文已影响0人  月银秋

有时候我们会碰到有关“进制转换”的需要,但是很多人都不清楚具体是怎么回事,这篇文章就帮助大家了解相关的内容。

首先我们要明确很重要的一点,计算机只能储存和计算二进制数
这时候一定有人会问,把文件用“十六进制编辑器”打开明明看到的是16进制数啊?但是查一下百度就知道“十六进制编辑器,用来以16进制视图进行文本编辑的编辑工具软件。”有“16进制视图”,就有“2进制视图”,16进制人看起来舒服,因此十六进制编辑器是比较常见的,而少见“二进制编辑器”。我们看到的16进制或者是2进制,其实都不是计算机内部的存储方式,而是经过转换而产生的一种视觉效果。
同样的,我们可以使用比如:

int number = 76;

虽然这里用的是十进制76,包括调试、输出等等情况下出现的都是76,但不代表计算机存储的是十进制数。

那么既然计算机只能存储和计算二进制数,那还怎么转换呢?我们先看一道题(不用做,看一下题目的意思就行):


题目
这是一道C语言的题目,但是没有关系,基本上还是可以看懂的。有题自然要有解: 解答
然后我们就发现一个很大的毛病:
如果我们调用
int bin = fun(12);

最后得到bin的值是1100,没什么问题对吧,那如果我们再加一句:

int bin2 = bin + 1 + 1;

结果很明显,1102。是不是感觉很奇怪?没错,因为转换结果1100明明是十进制1100啊!怎么能说是12的二进制形式呢?
我们可以发现,这个转换结果只能拿出来输出,而不能继续参与运算,因此,使用 int 类型是不合理的,我们应当把它作为 string 来处理。(当然如果你们学校出了这种题目,那只能照做,不然 你 分 没 了 !)

那怎么才是正确的转换方式呢?
如果你还希望参于计算的,那就压根不用转,因为计算机只能处理二进制数,根本没法给你转。
如果你希望以特定格式做输出的,可以参考以下的示例:

int number = 12;
string text = Convert.ToString(number, 2);
// text :"1100"
int number = 12;
string text = number.ToString("x");
// text :"c"
string text = "1100";
int number = Convert.ToInt32(text, 2);
// number :12
string text = "c";
int number = int.Parse(text, System.Globalization.NumberStyles.HexNumber);
// number :12
上一篇 下一篇

猜你喜欢

热点阅读