Matlab:如何正确获得相当于 2^63-1 的掩码?

标签 matlab integer uint64 bit-masks

我在使用 MATLAB 和 64 位整数时遇到了一些问题。我想要一个等于 2^63-1 的掩码(除 MSB 之外的所有掩码),但 MATLAB 似乎只是舍入了所有内容。

>> mask_fraction = uint64(9223372036854775807)

mask_fraction = 9223372036854775808 % This is 2^63 again, not 2^63-1!

同样,

  >> uint64(2^63)

    ans =  9223372036854775808       


    >> uint64(2^63-1)

    ans =  9223372036854775808

我的另一个尝试根本行不通:

>> uint64(2^63) - 1
??? Undefined function or method 'minus' for input arguments of type 'uint64'.

想法?

最佳答案

@BasSwinckels 正确地指出了一个问题。我会解决另一个问题。

第一个不能精确表示的 double 浮点整数是2^53+1。当您将表达式传递给 uint64 函数时,它们在转换为 uint64 之前被评估为 double 值。如果这些表达式的计算结果为不能精确表示的 double 整数,您将看到您所描述的行为。这正是 uint64(2^63-1)uint64(2^63) 都返回 9223372036854775808 的原因。 2 的所有幂都可以用 double 安全地表示,所以 uint64(2^63)-1uint64(2^63)-uint64(1) 是你的应该使用(一旦你弄清楚你的其他问题)。

关于Matlab:如何正确获得相当于 2^63-1 的掩码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18046989/

相关文章:

python - 在 numpy 数组中查找相同值序列的长度(运行长度编码)

带小数到数字的 PHP 字符串

python - Python VM是否缓存不能自动释放的整数对象?

c++ - 将字符串转换为无符号整数

c++ - 乘以 __int64

c - 编译 MEX 文件时出现链接问题

将数组的一部分复制到 C 中的第二个数组

c - 使用 uint64_t 的不便之处

swift - 对 64 位 UInt 右移充当有符号移位感到困惑

matlab - 尝试使用 MATLAB 绘制 z = x + y 时图形不正确