gpt4 book ai didi

bit-manipulation - APL中的按位运算?

转载 作者:行者123 更新时间:2023-12-04 08:30:12 25 4
gpt4 key购买 nike

我们需要为我的计算机体系结构类编写一个模拟IEEE浮点数除法的程序。我几乎已经做到了,但是我认为查看程序在APL中的样子会很有趣,但是据我所知,没有(简单的)方法可以在APL中进行按位运算(按位和/或) ,移动等...)。如果可能的话,在APL中最简单的方法是什么?

最佳答案

在APL中执行此操作的干净(=您要使用的方式)是:

  • 将数字转换为位向量(或位矩阵或更高维)
    APL值),
  • 对位向量进行移位旋转等操作,
  • 转换回数字

  • 第1步和第3步非常简单:APL有两个转换操作符完成编码(⊤)和解码(⊥)。位向量只是一种特殊情况;运营商
    使用任意基数(包括十六进制)。

    例子:
          ⍝ convert 13 to 4-bit vector. The number of 2s is the result length
    2 2 2 2 ⊥ 13
    1 1 0 1

    2 ⊥ 1 1 0 1 ⍝ convert back
    13

    APL程序员会 而不是写2 2 2 2来指示结果向量的所需长度,而是(4⍴2)。这是因为对于更长的arguments参数(例如64),代码更具可读性。

    负整数比较棘手,因为存在诸如1补码或2补码之类的不同格式。 ⊤和⊥工作,但您必须多加注意。

    ⊤和⊥提供了一些很酷的东西。首先你可以转换
    一口气拿几个数字:
          2 2 2 2 ⊤ 1 2 3
    0 0 0
    0 0 0
    0 1 1
    1 0 1

    接下来,就像已经说过的那样,它们适用于其他基数,例如16以表示十六进制结果:
          16 16 16 16 ⊤ 50000
    12 3 5 0

    结果为数字,因此您可能需要将其转换为字符:
          '0123456789ABCDEF'[⎕IO+16 16 16 16⊤50000]
    C350

    最棘手的情况是浮点数(因此也很复杂)。

    大多数APL解释程序都具有系统功能,例如APL68000中的⎕DR或GNU APL中的27⎕CR。 ⎕DR直接返回二进制矢量,而GNU APL中的27⎕CR将64位IEEE浮点数转换为64位2s补码整数,然后可以如上所述进行转换。

    将数字转换为位向量后,其余的操作很简单:
  • 用于访问各个位的索引([])
  • 取(↑)并放下(↓)以移位
  • 旋转(⊖或⌽)以旋转位
  • 用于二进制运算的 bool 函数And/Or/Nand/Nor/Not(∧和〜)。
  • 关于bit-manipulation - APL中的按位运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29719331/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com