【问题标题】:MIPS 32bit random integerMIPS 32 位随机整数
【发布时间】:2013-03-27 18:53:46
【问题描述】:

我正在尝试让 MIPS 生成 32 位随机整数。我正在尝试使用以下代码,但运行程序时出现错误。

addi $v0, $zero, 42
li $a1, 4294967295 #32 bit number
syscall

我正在使用 MARS 模拟器。该程序汇编没有任何错误。执行上述系统调用时会出现问题。如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 由于它使用Java的随机数支持,它可能只支持有符号数。我建议尝试小于 2^31 的数字。
  • @MarcB 表示范围的上限不能为负数。
  • @Gabe 是的,程序接受 2^31,但我希望程序给我一个介于 0 和 2^32 之间的随机值。所以我需要以某种方式告诉程序我提供的范围是无符号的。我该怎么做?

标签: random integer mips 32-bit


【解决方案1】:

我认为问题在于您提供的最大数量 (0xffffffff)。尝试使用(有符号的)最大正值(0x7fffffff

addi $v0, $zero, 42
li $a1, 0x7fffffff  #32 bit number (maximum 32bit signed positive number)
syscall

根据 OP 的评论,要获得 32 位数字,您可以分两步进行:首先“掷硬币”获得第 32 位,然后随机获得其他 31 位:

    addi $v0, $zero, 42
    move $a2, $zero
    li $a1, 2
    syscall
    bnez $a0, skip
    li $a2, 0x80000000
skip:
    li $a1, 0x7fffffff #31 bit number (maximum 32bit signed positive number)
    syscall
    or $a0, $a0, $a2   # Here $a0 has a 32 bit number

【讨论】:

  • 正如我在上面的评论中提到的,该程序接受 2^31。但我希望程序给我一个 0 到 2^32 之间的随机值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多