Matlab 如何对双精度数字使用位异或?

Matlab 如何对双精度数字使用位异或?,matlab,integer,double,type-conversion,double-precision,Matlab,Integer,Double,Type Conversion,Double Precision,我想在matlab中对我的双精度数使用xor,但bitxor只对整数有效。Matlab中是否有可以将double转换为int的函数?您可以转换为整数: a = 1.003 int8(a) ans = 1 这将为您提供一个8位有符号整数,您还可以获得其他大小,即int16,或者无符号,即uint8,具体取决于您要执行的操作您要查找的函数可能是:int8(number),int16(number),uint32(number)它们中的任何一个都会将双精度转换为整数,但是你必须为你想要达到的结

我想在matlab中对我的双精度数使用xor,但bitxor只对整数有效。Matlab中是否有可以将double转换为int的函数?

您可以转换为整数:

a = 1.003

int8(a)

ans =

1

这将为您提供一个8位有符号整数,您还可以获得其他大小,即
int16
,或者无符号,即
uint8
,具体取决于您要执行的操作您要查找的函数可能是:
int8(number)
int16(number)
uint32(number)
它们中的任何一个都会将双精度转换为整数,但是你必须为你想要达到的结果选择最好的一个。请记住,如果不舍入数字,则无法从双精度转换为整数

如果我正确地理解了你,你可以创建一个函数,通过将起始值乘以2^n,然后使用前面提到的任何函数将其转换为整数,简单地从双精度数字中删除“逗号”,执行任意操作,然后通过将数字除以2^n将逗号返回到其原始位置

将起始值乘以2^n是一种减少舍入误差的方法。 n的理想值是逗号后的位数(如果该数字相对较小)


请同时说明,为什么要这样做?这似乎不是最佳解决方案。

您能解释一下为什么要对double应用位异或吗?只有一种更简单的方法可以实现你的目标。在我的程序中,我需要使用0,1之间的双倍数。要使用位异或,我应该怎么做?@saba2085但你是说你想找到像0.2343和0.789787这样的异或吗?因为在这种情况下,如何定义xor?转换成整数会使结果更接近……@saba:是的,但是为什么你需要对这些数字进行异或运算呢?这通常不是你想做的事情,因此了解问题背后的原因会有帮助。这样你可能会得到更好(或更合适)的答案。我想你是在解决这个问题之前先尝试跑步。您似乎不了解所讨论的数据类型或操作的基本知识。您应该阅读有关整数和浮点数字表示的内容,然后阅读有关按位运算(如xor)的内容,以及它们通常是如何应用的。在这个问题上,你似乎没有听取任何人的建议。不是这样。我想完全保存我的号码。我的号码是这样的0.5,0.789。。。我想保留这个表格。那么双打的异或是什么呢?你是如何定义它的?在我的程序中,我将我的数字[0256]改为[0,1]之间的数字,我想对我的数字和一些随机数(在[0,1]之间)使用位异或。当我说将双精度改为int时,我的目标是这样的0.789-->789我如何才能“在你的程序中查看”既然你没有提供任何代码?为什么不在你缩放数字之前先做一下呢?或者你可以将它们乘以256,转换为int16,bitxor,然后除以256?@saba2085那绝对是错误的!请使用pivovarit的方法。我想乘以
2^n
可能更有意义。我有模糊细胞自动机一个有两个数字的数组。在实现的每个阶段,我都希望使用细胞自动机规则,然后对结果和一些随机数使用位异或。在使用位异或的结果之后,保存到细胞自动机以供下一阶段使用。@pivovarit我也认为
int16
更合适,因为
int8
的最大值为127。否则,我将这是正确答案。@saba2085将所有这些信息添加到问题中,这将使每个人的生活更轻松