Octave的新版本(例如11.1.0)可以对以十六进制表示的整数进行算术运算

编程语言 2026-07-10

在较旧的Octave版本(5.2.0)中,我可以很轻松地用十六进制格式将两个数字相加:

octave: 1> 0x1122334455 + 0x1122
0x112233446677

在那个时期的最新版本(11.1.0)中,同样的命令会抛出这个错误:

错误:二进制运算符 '+' 对 'uint64标量' 与 'uint16标量' 的运算尚未实现

有没有办法开启整数之间的自动类型转换?或者有没有办法把十六进制数当作浮点数?

我把Octave的命令行界面当作日常计算器,日常大量处理十六进制数。每次都要手动强制转换数字,真是让人头疼。这让我放弃使用更新的Octave版本。

解决方案

这个错误在11.1.0版本并非新问题;目前我只能访问9.3.0,但同样会出现这个错误。

正如上面的注释所解释的,内部Octave将十六进制数转换为uintXX,其中XX是表示该十六进制值所需的最小位数。错误发生的原因是Octave不再(也许不再)进行自动整数类型提升。

也许这不是当前最可接受的解决方案,但你可以通过将整数大小声明为与最大数字相匹配来变通解决这个问题:

octave:6> plus ( 0x1122334455,  uint64(0x1122))
ans = 73588233591

我猜这里存在对意图的歧义的可能性:

octave:6> plus ( 0x1122334455,  uint64(0x1122))
ans = 73588233591
octave:7> plus ( 0x1122334455,  uint64(0x0000001122))
ans = 73588233591
octave:8> plus ( 0x1122334455,  uint64(0x1122000000))
ans = 147173098581

但这应该相当容易避免。

另请注意,这个错误是Matlab兼容的行为(在R2025a里测试过)

>> plus ( 0x1122334455,  0x1122)
Error using  + 
Integers can only be combined with integers of the same class, or scalar doubles.
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章