Lisp -- 如何在不进行基数转换的情况下将多个十六进制数相加?

发布于 2024-11-02 14:15:14 字数 56 浏览 4 评论 0原文

我想知道如何在 lisp 中添加几个十六进制数字,而不先将它们转换为另一个基数。这怎么可能做到呢?

Ii would like to know how to add several hexadecimal numbers in lisp without first converting them to another base. How could this be done?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

孤独陪着我 2024-11-09 14:15:14

通用 Lisp:

> (setf *print-base* 16)

> (setf *read-base* 16)

> (+ a d)
17

Common Lisp:

> (setf *print-base* 16)

> (setf *read-base* 16)

> (+ a d)
17
征棹 2024-11-09 14:15:14

在 GNU Emacs 中,十六进制数字用 #x 标记。

(+ #x3 #xA)
13

我不知道 Common LISP 或Scheme 使用什么。

如果您拥有类似的东西

125A BD22 34FF

并且想要将它们添加起来,则必须对它们进行编辑,以在将它们包装在 (+ ...) 之前添加 #x 标签。

(+ #x125A #xBD22 #x34FF)

In GNU Emacs, hexadecimal numbers are tagged with #x.

(+ #x3 #xA)
13

I don't know offhand what Common LISP or Scheme use.

If what you have is something like

125A BD22 34FF

and you want to add them up, you'll have to take an edit pass over them to prepend the #x tags before you wrap them in (+ ...).

(+ #x125A #xBD22 #x34FF)
七颜 2024-11-09 14:15:14

十六进制只是使用从 0 到 F 的数字的字符表示形式。Lisp 实现通常会在相加之前将十六进制数字转换为其内部二进制表示形式。然后,如果这是所需的表示格式,则可以以十六进制打印总和:

(format T "~x" (+ #xA #x2))

您可以编写一个函数来实现十六进制字符数字的符号加法逻辑,例如 #\A 加 #\2 是 #\C,如果您想要超越单个十六进制数字。但这样的函数没有什么用处,只是作为演示符号十六进制加法算法的练习。

Hexadecimal is just a character representation of numbers using digits from 0 to F. The Lisp implementation will typically convert hex numbers into its internal binary representation before addition. You can then print the sum in hex if that's the desired presentation format:

(format T "~x" (+ #xA #x2))

You could write a function that implements the logic for symbolic addition of hexadecimal character digits, like that #\A plus #\2 is #\C, handling carry if you want to go beyond single hex digits. But such a function serves little purpose but as an exercise to demonstrate the algorithm for symbolic hexadecimal addition.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文