你们对进制的转换都熟悉吗?

2018-01-27 13:09:08 +08:00
 septet

感觉好难,每次遇到进制的转换或者计算都要 Google,特别是 16 进制,你们遇到进制的转换有什么好的方法吗

6001 次点击
所在节点    程序员
40 条回复
5mins
2018-01-27 16:32:53 +08:00
bramblex
2018-01-27 16:44:03 +08:00
嗯...

其实为啥要进制转换啊,无论 2 / 8 / 16 / 10 都是表示同一个数啊
geelaw
2018-01-27 16:52:41 +08:00
@septet https://geelaw.blog/entries/rethinking-base-conversion/ 简单来说,变成你会做算术的进制的方法是级数求和(多项式求值,可以用秦九韶方法),从你会做算术的进制变成你不会做算术的进制的方法是反复做带余除法。

如果你用 Windows 的话,在 PowerShell 里直接 (十进制数字).ToString('x') 就得到十六进制的表示,或者 0x 十六进制 就得到了十进制的表示。

@bramblex #22 因为你需要表示一个数,而表示一个数最常见的方法是使用进位制。
5mins
2018-01-27 16:53:12 +08:00
我们将物质的现象跟物质本身区分开来。假设一个数,这个数在十进制里面的表示是:10,在二进制的表示是:1010,十六进制是:A,八进制是:12。一个数可以有不同的表现形式,但这个数本身所代表的是不会随着表现形式的变更而改变的。我理解的数不是一个“数”,会将它想象成数轴上的有限的一段,或者说想象成一段绳子,或者一壶水。用“十进制”的一排杯子(规则)去装这壶水,那看到的就是这壶水在十进制下的表现形式。这样去理解进制转换的话可能会容易理解一点。
bramblex
2018-01-27 17:02:58 +08:00
@geelaw

运算又不会因为进制不同就产生不同结果,毕竟计算机里存储的都是二进制数。

难道我用不同进制表示一个数,这个数大小就改变了,加减乘除性质就不一样了?

除了输出成字符串用于展示的时候存在意义,其他时候我看不见手动转换进制有任何意义,并且绝大多数语言标准库里都有根据进制输出字符串的函数。
geelaw
2018-01-27 17:13:45 +08:00
@bramblex 计算机并不一定要用二进制存储一个数。只是你常用(我也常用)那种用二进制存储的计算机。

您后半段论证感觉就是:研究更好的排序算法是没有意义的,因为标准库里有排序算法。

问题的价值在于问题本身,而不是它有什么用。当然这样论证会导致不反对 X-Y 问题,但就这个进位制转换的特殊问题来说,它本身的意义还是很明显的。
crbee
2018-01-27 17:32:45 +08:00
@fantasynoff 改游戏币么 - -
iugo
2018-01-27 17:46:20 +08:00
JavaScript 在这种情况还是挺方便的. 浏览器控制台.

```
var num = 999;
num.toString(16);
```
akira
2018-01-27 17:46:43 +08:00
看习惯了就好。
bramblex
2018-01-27 18:34:44 +08:00
@geelaw

你说的非常对,但是说实话, 鸡同鸭讲……。因为我们两个人分别是在不同的 “隐含前提” 下进行的论述,所以得出不同结论非常正常。
jason19659
2018-01-27 20:38:02 +08:00
开浏览器写 js。。
l00t
2018-01-27 21:08:56 +08:00
正整数都还好。遇到负数和浮点数,我有点心累…… 还是直接上计算器吧……
littlebutt
2018-01-27 21:34:17 +08:00
学生党表示暂时没有压力,不过毕业以后这些东西应该很快会忘掉吧
koushiro
2018-01-27 21:49:24 +08:00
写半年底层 不熟也熟了→_→
gnaggnoyil
2018-01-27 22:12:18 +08:00
@bramblex 然而如果你写过高精度运算库的话就会发现进制转换的问题也是可以很要命的……
mauve
2018-01-27 22:12:30 +08:00
组成原理基本操作,二进制中转一下,数大一些的需要计算器
alcarl
2018-01-27 22:21:46 +08:00
随便算算就用计算器,近期老用就用 perl python 啥的写几段代码来转换
cppgohan
2018-01-27 23:53:51 +08:00
大一学计算机导论, oct, hex, binary 似乎都覆盖了.. 感觉进制转换谈不上"原理", 值不变, 只是表示的方式不同

当然最快还是 win10 的计算器.
bramblex
2018-01-28 02:14:37 +08:00
@gnaggnoyil

不仅仅高精度,大数一样蛋疼。不过我讨论的前提是我们日常一般程序的开发场景下,不仅不需要开发高精度库,甚至连使用高精度库都不需要……

如果凡事都讨论极端条件,那就没完了。
rexyan
2018-01-29 17:42:01 +08:00
来几遍子网掩码,坨坨的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/426364

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX