【问题标题】:Generating a random number with specified bit length? [duplicate]生成具有指定位长的随机数? [复制]
【发布时间】:2020-10-16 01:55:36
【问题描述】:

我正在尝试制作一个可以生成随机数并指定随机数可以是多少位的函数。

更具体地说,我正在尝试生成一个 8、10 或 12 位长的数字。这个位数由另一个变量指定。

然后我想将此数字表示为字符串中的十六进制或十进制中的有符号和无符号整数。我想我可以在这部分使用各种 Integer.toString 方法。

如何在 Java 中生成特定位长的随机数?

到目前为止,我已经有了这个功能框架:

public static String generateQuestion(int numBits, int taskType){
    String questionStr = "";
    String questionVal = ""; // This is the string hexadecimal version of the randomly generated number
    // TODO: Code to generate random value based on numBits
    

    switch(taskType){
        case 0: // Hex to Decimal
            questionStr = "What are the signed and unsigned values for the " + numBits + "-bit value " + questionVal + "?";
            return questionStr; // Return the constructed string
        case 1: // Signed Decimal to Hex
        case 2: // Unsigned Decimal to Hex
        default:
            throw new IllegalStateException("Unexpected Question Type: " + taskType); // In case the task type is something other than the 3 possible question types
    }
}

【问题讨论】:

  • 您需要加密安全的号码还是仅仅需要良好的分布?
  • 我不需要安全号码。我只需要一些非常简单的东西,它有一个不错的范围和随机性。至于链接,我在发布之前看到了它,但我认为它不涉及我的特定位要求。它生成一个范围内的数字,但我不知道如何设置范围以匹配位长。
  • 也许可以为每个指定的位长度创建一个max_var?
  • 要生成一个8位的数,用2^8, 10, 2^10, 12, 2^12,这不就是字面上的定义吗?
  • 嗯,可以。我想知道这是否仅适用于 base-10,但我可以将其生成为十进制并稍后转换为十六进制。

标签: java android random bit-manipulation bit


【解决方案1】:

创建一个java.util.Random 的新实例,最好只为整个应用创建一个。

然后,您可以在其上调用.nextInt(x),其中 x 是上限(不包括)。所以,如果你想要一个 4 位随机数,你会调用 .nextInt(16),或者如果你发现它更易读(它变成完全相同的字节码),.nextInt(0x10),它会生成一个介于 0(含)之间的随机数和 16(不包括),所以,从 00001111

要查找“16”,只需1 << (bits-1)。例如rnd.nextInt(1 << (12-1)) 会给你一个 12 位的随机数。

数字只是。 int 没有十六进制、十进制或二进制的概念。这是您在打印时选择的东西。例如,String.format("%x", 10) 将打印 A

【讨论】:

  • 啊 nextInt() 正是我需要的,谢谢。
  • 只有一个问题,如何在android项目中创建util.random的全局实例?
  • 我猜只是做一个静态字段。
  • 明白了。我如何让这个 rng 创建负数?我会保留相同的代码但将其显示为有符号整数吗?我遇到了一个问题,它只使用 toString(x, radix: 10) 制作正整数
  • 然后加减。要生成[X, Y) 之间的数字,请使用:.nextInt(Y-X)+X。即使 X(或 Y!)为负数,这也有效。
猜你喜欢
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2012-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多