首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >左移到固定符号位

左移到固定符号位
EN

Stack Overflow用户
提问于 2020-11-17 17:07:48
回答 1查看 44关注 0票数 0

我正在寻找一种方法,将正向固定数转换为符号位置。基本上,我想要的是一种可预测的(不是未定义的)方式来执行固定左移,而不进行溢出检查。

一个低效的实现看起来像这样:

代码语言:javascript
复制
(define shift-left
  (lambda (value shift)
    (let ([unsigned-to-signed
       (lambda (value width)
         (let* ([sign-mask (bitwise-arithmetic-shift-left
                1 (- width 1))]
            [sign (bitwise-and value sign-mask)])
           (bitwise-ior
        (bitwise-bit-field value 0 width)
        (- sign))))])
      (unsigned-to-signed
       (bitwise-arithmetic-shift-left value shift)
       (fixnum-width)))))

(shift-left 1 59) ⇒ 576460752303423488
(shift-left 1 60) ⇒ -1152921504606846976
(shift-left 1 61) ⇒ 0

理想情况下,这将编译为一条CPU指令(至少对于常量移位;CPU处理移位的方式与寄存器一样宽或更宽)。

EN

回答 1

Stack Overflow用户

发布于 2020-11-21 08:52:09

在方案中,除非您查找implementation defined features,否则它不会工作。

在方案中,它是标准化的tower of arithmetic types,这使得你很不方便地控制数字表示的内侧。

只有当你理解一些实现的内部原理时,你尝试做的事情才有意义,否则你就是在浪费时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64872243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档