【问题标题】:Converting int and float to binary将 int 和 float 转换为二进制
【发布时间】:2013-06-13 21:46:36
【问题描述】:

我想询问有关将intfloat 转换为binary 的问题。第一个很简单,但第二个,我不知道。它应该是格式化的符号、基数和尾数。有什么想法吗?

【问题讨论】:

  • 您是在谈论保存带有浮点数据的文件还是打印出浮点二进制值的字符串表示形式?
  • 二进制文件是如何存储的?不知道你的问题是什么。您可以添加更多信息或重述吗?
  • 没错,对于 int 很明显,但对于 float 则不是。
  • 你尝试了什么? see this
  • @ManishMishra 是这样的,但输出应该是:sign(space)base(space)mantissa。

标签: floating-point mips


【解决方案1】:

这是一个在 MIPS 中打印出单精度浮点数的符号、指数和尾数的示例。你说你已经知道如何将十进制转换为二进制,所以我省略了这一步。

有关单精度浮点数布局的详细信息,请参见: this

.text
main:
    li.s $f0 0.15625 #load floating point immediate
    mfc1 $t8 $f0 #store in $t8

    #extract bit 31
    ori  $t0 $zero 0x1
    sll  $t0 $t0 31 
    and  $a0 $t0 $t8
    srl  $a0 $a0 31

    #print sign
    addi $v0 $zero 1
    syscall

    #print space
    addi $a0 $zero 32
    addi $v0 $zero 11
    syscall

    #extract bits 23-30
    ori  $t0 $zero 0xFF
    sll  $t0 $t0 23
    and  $a0 $t0 $t8
    srl  $a0 $a0 23

    #print exponent
    addi $v0 $zero 1
    syscall

    #print space
    addi $a0 $zero 32
    addi $v0 $zero 11
    syscall

    #extract bits 0-22
    ori  $t0 $zero 0xFFFF
    sll  $t0 $t0 7
    ori  $t0 $t0 0x7F
    and  $a0 $t0 $t8

    #print mantissa
    addi $v0 $zero 1
    syscall

    #print new line
    addi $a0 $zero 10
    addi $v0 $zero 11
    syscall

    jr $ra

这将输出:

0 124 2097152

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2019-03-18
    • 2016-08-19
    • 2012-05-05
    • 1970-01-01
    相关资源
    最近更新 更多