【问题标题】:Binary Representation Issue in MATLAB Using dec2binMATLAB 中使用 dec2bin 的二进制表示问题
【发布时间】:2021-07-10 15:00:18
【问题描述】:

在尝试可视化大整数的二进制表示时,我一直在处理 MATLAB 的问题,这让我很困惑。我正在研究一个小端机器和积极的int64 值。因此,最高有效位 (MSB) 始终为 0。所有其他位都可以为 0 或 1。我注意到,当我检查大值的二进制结构时,最低有效位 (LSB) 一侧的许多位为 0。对于实例:

>> dec2bin(4611695988848162845, 64)

ans =

    '0100000000000000000010010001000101101011011000110111100000000000' % WRONG!     
>> dec2bin(4611695988848162846, 64)

ans =

    '0100000000000000000010010001000101101011011000110111100000000000' % <--- WRONG and identical to above!

虽然值 4611695988848162845 的正确二进制表示应该是:

Correct binary representation of 4611695988848162845:
'0100000000000000000010010001000101101011011000110111100000011101'

您可以验证正确的二进制结构here 或使用simple C++ code 来验证这一点。有人可以向我解释这里发生了什么吗?执行dec2bin(int64(4611695988848162845), 64) 似乎也无济于事。

【问题讨论】:

  • 在 MATLAB 中,4611695988848162845 是一个双精度浮点值。因为这个数大于 2^52,所以不能准确存储,低位丢失。
  • int64(4611695988848162845) 直接从该数字字符串创建一个 64 位整数。在 MATLAB 命令提示符下键入:a=4611695988848162845; int64(a),然后键入:int64(4611695988848162845)。看到不同?在第一种情况下,a 是一个 double,转换为 int64;在第二种情况下,直接创建 int64
  • 你是对的。我专注于int64 部分,没有尝试dec2bin 部分。我这里有 R2017a,dec2bin 包含声明 d = double(d);,这意味着无论你给它输入什么数字,它总是在转换为二进制之前转换为 double。在 R2021a 中,dec2bin 有两条代码路径,一条用于浮点输入,一条用于其他数字类型。

标签: matlab binary


【解决方案1】:

使用dec2bin(int64(4611695988848162845), 64)“投射”到int64 确实适用于我的R2020a 安装。

要解释为什么输入的结果不正确,请查看help dec2bin

... If D is greater than flintmax, dec2bin might not 
    return an exact representation of D. 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2013-10-09
    相关资源
    最近更新 更多