经常使用十六进制的你,有一个问题需要解答

13

每当我使用十六进制值时,我都会在脑中或借助转换器将其转换(如果需要)为十进制。我在想,如果你长时间地使用十六进制,你是否会像读十进制数一样“看到”它的值呢?我的意思是,你能否在一段时间后轻松地阅读16进制值,就像阅读10进制值一样?当我编写使用十六进制值的代码时,我这么做是因为它看起来很性感和酷(有时因为8位可以装入两个数字中,这很有帮助),而不是因为我感觉对它们很舒服。这样我就能知道是否有必要尝试去适应十六进制,以便有一天能够轻松地使用它们。


我认为这可能是一件有趣的事情。对于这个问题点赞。 - Paul Alan Taylor
你的意思是熟悉十六进制作为一种数字系统,还是能够将它们转换成和转出十进制?比如说,EF09 + 4我没有问题,但我不能立刻告诉你EF09的十进制表示。 - David Thornley
3
我曾经是IBM大型机的系统程序员,那里你会花费很多时间查看转储并在脑海中进行十六进制算术运算。所以,是的,你会习惯这种工作。几年后,我可以像读原始源代码一样快速阅读转储,并且能够在其中发现控制块。这就像任何其他事情一样——如果你花费很多时间去做它,你就会变得更加擅长。话虽如此,如果你不需要使用它,那么没有必要这样做。 - Joe McMahon
享受你的十六进制练习吧(看看我下面的答案)。 - Paul Alan Taylor
10个回答

8
大脑的工作方式是,如果你经常使用它进行某项任务,那么它会变得更加优秀。有些人声称“它就像肌肉”,但这有点过于简化了。
所以,如果你每天都在进行十六进制转换,最终你将能够直接转换相当大的数字,并且你可以进行十六进制算术运算而不需要转换成十进制和再转回十六进制。
我曾经花了一个晚上记忆前100位π的数字。
那又怎样呢?
爱因斯坦曾说过从不记忆任何电话号码。他说:“我有电话簿。”
这里也是同样的道理。如果你想给自己和朋友留下深刻印象,那当然可以。但这只是一种头脑锻炼,而不是真正有用的技能。
在编程中,除非你主要使用汇编语言,否则你很少使用十六进制数。在与位操作相关的情况下使用十六进制数是有意义的。例如,你可以通过AND运算掩码字节为0xFF。与位移、符号位、OR和XOR相关的数字也可能在十六进制下更加合理。通常情况下,日常算术所涉及的数字最好用十进制表示。
完成了花招之后,编程的最重要目标之一是编写易于他人(也许有一天是你自己)理解和阅读的代码。在正确的地方使用十六进制是好的;在错误的地方使用它则是混淆和不良的。

6

不要使用十六进制,因为“它看起来很性感和酷炫(有时是因为8位二进制可以放入两个数字中)”。相反,使用更合适的数字系统。

十六进制在处理二进制位(例如位掩码、标志等)时更为合适,因为它们与二进制密切对应,并且(通过一些练习)您可以快速识别十六进制数中的每个位。

十进制在处理“正常”的现实生活数字时更为合适。


嗯,实际上我很少使用十六进制。仔细想想,几乎从不使用,因为我不做太多的位运算。当我使用它时,主要是如果我需要保存地址或颜色之类的东西。我可以用十进制来写,但我认为用十六进制更漂亮,更合适。我不是那种为了酷而这样做的人,那句话更像是“我使用它,但我没有真正的理由”。 - Hoffa

2

这是一个非常好的问题(给你点赞+1)。个人而言,我使用十六进制来描述颜色,并且已经使用了将近15年 - 现在我可以通过查看十六进制值并说出“那是紫红色”之类的话语来惊艳我的朋友和同事。所以我的想法是,如果你长期以某种方式使用某种方法,你的大脑最终会为你建立这个桥梁。


1

在处理标志时,我总是使用十六进制。在处理例如字符的代码时,我总是使用十六进制。在处理实际数字时,我根据上下文需要使用十六进制或十进制。


3
使用二进制移位操作,例如1 << 47,是最佳的标记方法。当你需要打包64个标记时,这会让生活更加轻松。 - Hamish Grubijan
个人而言,我使用带有十六进制值的命名常量。也许是因为我不在64位值中存储标志 - 在那一点上,它变成了两个独立的32位标志。 - Anon.
是的,32位可能更容易看懂。想象一下有64行像这样的代码:nameGHKKJH = 0x0000000000001; nameGHKASD = 0x0000000000002; ... nameGHKASD = 0x0008000000000;现在将其与以下代码进行比较: nameGHKKJH = 1 << 0; nameGHKASD = 1 << 1; ... nameGHKASD = 1 << 27; - Hamish Grubijan

1

我认为你不需要只是为了练习而练习使用十六进制数。如果你有一场考试需要知道十六进制数,那就练习吧。如果你正在面试一个可能需要处理协议字段或在寄存器中设置位的工作,那么就练习吧。

如果你在日常编码中经常使用十六进制数,你最终会获得你想要的技能。如果你不经常使用它们,那么你可能不需要这些技能。我不会强迫你去练习。


1

很多年前,我主要使用汇编语言工作,并决定需要学习十六进制的基本知识(乘法和加法表)。于是我写了几张图表贴在墙上开始学习。我的经理路过,问我那是什么,然后告诉我去买一个十六进制计算器!我从未学会那些知识,但我觉得在那种情况下这样做是个好主意。而且我认为这也不难。

话虽如此,我同意其他答案 - 在正确的上下文中使用十六进制,主要目标应该是使代码易于理解。


1

有趣的是,八进制系统是由瑞典国王查尔斯十二世发明的,他本打算强制全国使用,但两年后不幸去世了。


2
是的,从那时起我们就再也没有恢复过来。太遗憾了。我们本可以在二进制计算机到来之前就准备好了。或许分析引擎和差分机器也可以使用二进制(或八进制)数字,使它们变得简单得多,这样查尔斯·巴贝奇可能真的完成了后者,计算机时代也可能以蒸汽计算机开始! - Daniel C. Sobral

1

对不起,我太过于极客了。

我必须为你做这个。

http://pap.centelia.net/

这是一个我写的小型JavaScript游戏,旨在帮助您熟练掌握十六进制。

是的,你可以作弊,但那并不是重点!


1

如果你长时间使用十六进制,最终你会习惯它的,没错。就像你小时候习惯了十进制一样。只是当你因为“π不等于3.243f6a88…”之类的原因挂科数学课时,请不要抱怨。

此外,@oefe,在处理“普通”的现实生活中的数字时,十进制并不更合适,只是更受欢迎而已。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接