设置数组中的最后 N 位
我确信这相当简单,但是我有一个很大的心理障碍,所以我在这里需要一点帮助!
我有一个 5 个整数的数组,该数组已经填充了一些数据。我想将数组的最后 N 位设置为随机噪声。
[int][int][int][int][int]
eg. set last 40 bits
[unchanged][unchanged][unchanged][24 bits of old data followed 8 bits of randomness][all random]
这很大程度上与语言无关,但我正在使用 C# 工作,所以用 C# 给出答案会加分
I'm sure this is fairly simple, however I have a major mental block on it, so I need a little help here!
I have an array of 5 integers, the array is already filled with some data. I want to set the last N bits of the array to be random noise.
[int][int][int][int][int]
eg. set last 40 bits
[unchanged][unchanged][unchanged][24 bits of old data followed 8 bits of randomness][all random]
This is largely language agnostic, but I'm working in C# so bonus points for answers in C#
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
C# 中没有任何 bit-fu:
Without any bit-fu in C#:
当您将任何数据与随机数据进行异或时,结果是随机的,因此您可以执行以下操作:
对于任何 N 的通用解决方案,您可以使用循环:
请注意,这调用 random 的次数超出了必要的次数,但很简单。
When you XOR any data with random data, the result is random, so you can do this:
For a general solution for any N you can use a loop:
Note that this calls random more times than necessary, but is simple.
在伪 Python 中:
In pseudo-Python:
Int32 是 4 个字节或 32 位。
所以你需要最后一个 int 和额外的 8 位。
说明:
最后一个元素的修改应该非常清楚 - 如果您需要最后 40 位,则最后 32 位包含在其中。
其余八位的修改以 0x000F + 1 为界,因为 rand.Next 的参数是独占上限,因此生成的随机数不会超过该上限。该数字的其余位将保持不变,因为 1^0 == 1 且 0^0 == 0。
Int32 is 4 bytes or 32 bits.
So you need the last int, and 8 bits extra.
Explanation:
The last element's modification should be pretty clear - if you need the last 40 bits, the last 32 bits are included in that.
The remaining eight bits's modification is bounded above by 0x000F + 1, since rand.Next's argument is an exclusive upper bound, the randoms generated will be no more than that. The remaining bits of the number will stay the same, since 1^0 == 1 and 0^0 == 0.