2

标题说的简单问题。我在 StackOverflow(和互联网)上看到了一些关于 nibbles 用例的问题,但我不明白为什么我们需要使用 nibbles。我的意思是字节是计算中最小的内存单元,因此对其执行操作以操纵其中的一半似乎效率不高。例如,在 GeeksForGeeks 上有一篇关于以字节交换半字节的文章。因此,如果需要 nibble 之类的东西,为什么在任何非古老的编程语言中都没有将它定义为数据类型(如byteint任何其他)?

我知道位、半字节或字节的历史。还阅读了维基百科文章并搜索了很多东西以找到我的问题的答案,但我无法做到。也许这将标记为基于意见和封闭,但我只是想就这个话题进行一些讨论,我不知道其他好地方可以问同样的问题,所以请善待。

4

1 回答 1

1

“不了解历史的人注定要重蹈覆辙。” 埃德蒙·伯克

在过去,当内存稀缺时(20K 被认为很多),终端更像打字机(想想keypunch),使用BCD(二进制编码十进制)。甚至关于Nibble的 Wikipedia 文章也提到了BCD。

每个半字节代表一个十进制数字。半字节从 0 到 9,一个字节可以代表两个十进制数字。现在,当您的程序崩溃时,当这些字节在Green-bar上的代码转储中打印时,您可以查看 Hex 转储部分并将 vales 读取为直接向上的十进制数字,无需在您的程序中将这些位二进制转换为十进制头。

那么这是否意味着所有代码都是使用 BCD 编写的?不,如果您对某些值有问题,您只需添加一些行将值转换为 BCD(想想调试语句)然后读取转储中的 BDC 而不是进行所有转换。您可以尝试在 BCD 中完成所有工作,但与许多类型一样,有时并非所有功能都存在,因此您需要更改类型。与 BCD 相同,有时您无法用 BCD 做一些可以用整数做的事情。说得通?


从评论中添加了问题

在现代编程世界中现在是否需要轻咬?如果是,为什么?

我不希望看到半字节与使用现代高级编程语言编译器创建的代码一起使用,但对于微控制器,我不会对看到半字节被使用感到惊讶。

基本上,如果一个半字节没有硬编码为处理器指令集的一部分,我不希望看到一个半字节被使用。

于 2021-09-27T14:46:56.007 回答