用dec2bin实现MATLAB中的二进制表示问题

用dec2bin实现MATLAB中的二进制表示问题,matlab,binary,Matlab,Binary,当我试图可视化大整数的二进制表示时,我一直在用MATLAB处理一个问题,这让我很困惑。我在一台小小的endian机器上工作,它的值是正的int64。因此,最高有效位(MSB)始终为0。所有其他位可以是0或1。我注意到,当我检查大值的二进制结构时,最低有效位(LSB)端的许多位都是0。例如: >> dec2bin(4611695988848162845, 64) ans = '0100000000000000000010010001000101101011011000110

当我试图可视化大整数的二进制表示时,我一直在用MATLAB处理一个问题,这让我很困惑。我在一台小小的endian机器上工作,它的值是正的
int64
。因此,最高有效位(MSB)始终为0。所有其他位可以是0或1。我注意到,当我检查大值的二进制结构时,最低有效位(LSB)端的许多位都是0。例如:

>> dec2bin(4611695988848162845, 64)

ans =

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

ans =

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

您可以验证正确的二进制结构,也可以使用。有人能给我解释一下这里发生了什么吗?执行
dec2bin(int64(46116959988848162845),64)
似乎也没有任何帮助。

使用
dec2bin(int64(46116959988848162845),64)
int64进行“强制转换”
在我的R2020a安装中起作用

要解释结果对您的输入不正确的原因,请查看
帮助dec2bin


使用
dec2bin(int64(461169598848162845),64)将“强制转换”到
int64
,在我的R2020a安装中确实有效

要解释结果对您的输入不正确的原因,请查看
帮助dec2bin


在MATLAB中,
46116959898848162845
是一个双精度浮点值。由于此数字大于2^52,因此无法准确存储,低位丢失。
int64(46116959898848162845)
直接从该数字串创建一个64位整数。在MATLAB命令提示符下键入此命令:
a=46116959898848162845;int64(a)
然后这个:
int64(46116959898848162845)
。看到区别了吗?在第一种情况下,
a
是双精度的,转换为
int64
;在第二种情况下,直接创建
int64
。您是对的。我专注于
int64
部分,没有尝试
dec2bin
部分。我这里有R2017a,并且
dec2bin
包含语句
d=double(d),这意味着无论您输入什么数字,在转换为二进制之前,它总是转换为double。在R2021a中,
dec2bin
有两个代码路径,一个用于浮点输入,另一个用于其他数值类型。在MATLAB中,
461169598848162845
是一个双精度浮点值。由于此数字大于2^52,因此无法准确存储,低位丢失。
int64(46116959898848162845)
直接从该数字串创建一个64位整数。在MATLAB命令提示符下键入此命令:
a=46116959898848162845;int64(a)
然后这个:
int64(46116959898848162845)
。看到区别了吗?在第一种情况下,
a
是双精度的,转换为
int64
;在第二种情况下,直接创建
int64
。您是对的。我专注于
int64
部分,没有尝试
dec2bin
部分。我这里有R2017a,并且
dec2bin
包含语句
d=double(d),这意味着无论您输入什么数字,在转换为二进制之前,它总是转换为double。在R2021a
dec2bin
中有两个代码路径,一个用于浮点输入,另一个用于其他数字类型。
Correct binary representation of 4611695988848162845:
'0100000000000000000010010001000101101011011000110111100000011101'
... If D is greater than flintmax, dec2bin might not 
    return an exact representation of D.