【问题标题】:How to use Bitxor for Double Numbers?如何将 Bitxor 用于双数?
【发布时间】:2013-07-19 08:10:56
【问题描述】:

我想在 matlab 中对我的双数使用 xor,但 bitxor 仅适用于 int 数。 Matlab中有没有可以将double转换为int的函数?

【问题讨论】:

  • 你能解释一下为什么你想将 bitxor 应用于 double 吗?只有更简单的方法可以实现您的目标。
  • 在我的程序中,我需要使用 0,1 之间的双数。对于使用 bit xor 我应该怎么做?
  • @saba2085 但你是说你想找到像 0.2343 和 0.789787 这样的异或吗?因为在那种情况下,您如何定义异或?转换为整数将四舍五入...
  • @saba: 是的,但是为什么您需要对这些数字进行异或运算 - 这通常不是您想要做的事情,因此了解问题背后的原因是 - 这样您可能会得到更好(或更合适)的答案。
  • 我认为您在遇到此问题之前尝试跑步。您似乎不了解您正在谈论的数据类型或操作的基础知识。您应该阅读有关整数和浮点数值表示的内容,然后阅读有关异或等按位运算以及它们通常如何应用的内容。您似乎没有在此问题上听取任何人的建议。

标签: matlab integer double type-conversion double-precision


【解决方案1】:

您正在寻找的函数可能是:int8(number)int16(number)uint32(number) 其中任何一个都会将 Double 转换为 Integer,但您必须选择最适合您想要达到的结果的函数。请记住,如果不对数字进行四舍五入,就不能从 Double 转换为 Integer。

如果我正确理解了您,您可以创建一个函数,通过将起始值乘以 2^n,然后使用前面提到的任何函数将其转换为 Integer,只需从 Double 数字中删除“逗号”,执行无论你想要什么,然后通过将数字除以 2^n

将逗号返回到其原始位置

将起始值乘以 2^n 是一种可以减少舍入误差的技巧。 n 的理想值是逗号后面的位数,如果这个数字相对较小的话。

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

【讨论】:

  • 我认为乘以2^n 可能更有意义?
  • 我有双数的模糊元胞自动机。在实现的每个阶段,我想使用元胞自动机规则,然后使用 bitxor 作为结果和一些随机数。在使用 bit xor 的结果保存到下一阶段的元胞自动机之后。
  • @pivovarit 我也认为int16 更合适,因为int8 的最大值为127。否则我认为这是正确的答案。
  • @saba2085 将所有这些信息添加到问题中,这将使每个人的生活更轻松
【解决方案2】:

您可以只转换为整数:

a = 1.003

int8(a)

ans =

1

这为您提供了一个 8 位有符号整数,您还可以获得其他大小,即 int16 或无符号,即 uint8,具体取决于您想要做什么

【讨论】:

  • 不是这样。我想完全保存我的号码。我的号码是这样的 0.5,0.789 ... 我想保留这个表格。
  • 那么双打的xor 是什么?你是如何定义它的?
  • 查看我的程序,我将我的数字 [0,256] 更改为 [0,1] 之间的数字,我想将 bitxor 用于我的数字和一些随机数(在 [0,1] 之间。当我说将 double 更改为 int 我的目标是这样的 0.789--->789
  • 由于您没有提供任何代码,我该如何“查看您的程序”?你为什么不在你扩大你的数字之前做呢?或者你可以将它们乘以 256,转换为 int16,bitxor,然后除以 256?
  • @saba2085 这绝对是错误的!请改用 pivovarit 的方法。
猜你喜欢
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多