为什么按位布尔和移位运算在 CPU 架构中称为逻辑运算?

Why are bitwise boolean and shift operations called logical operations in CPU architecture?

提问人:Abdulkadir Arslan 提问时间:8/30/2022 最后编辑:Peter CordesAbdulkadir Arslan 更新时间:8/31/2022 访问量:227

问:

这张图片来自《计算机组织与设计》一书:

table of logical operations, their C and Java operators, and RISC-V instructions

如您所见,左侧列被标记为“逻辑操作”,但显示的操作都是按位的。传统上,和 称为逻辑运算符,而 和 称为按位运算符。&&||&|

他们用以下句子介绍表格:

因此,操作被添加到 编程语言和指令集架构,以简化其他 事物,将位打包和解包成文字。这些指令称为 逻辑运算。图 2.8 显示了 C、Java 和 RISC-V 中的逻辑操作。

你认为他们为什么要为 和 写逻辑运算符?&|

cpu-architecture 按位运算符 logical-operators 布尔逻辑 riscv

评论

1赞 Federico klez Culloca 8/30/2022
“操作”,而不是“操作员”。从技术上讲,它们是逻辑运算,是逐位应用的,但仍然是逻辑运算。话又说回来,我不会在逻辑运算中包括班次。
3赞 Eugene Sh. 8/30/2022
这只是一个笼统的措辞,不一定与特定的标准术语一致。
2赞 user16320675 8/30/2022
也许他们使用“逻辑运算”来区分“数学运算”(我不知道,最好问问作者)
1赞 Peter Cordes 8/30/2022
@user16320675:是的,我认为“布尔逻辑”是这个术语的来源。它不是用数字“算术”,而是用比特。
0赞 Lindydancer 8/31/2022
通常,“逻辑”与“算术”相对应,分别表示无符号和有符号运算。例如,RISC-V 指令和 分别代表逻辑和算术右移。但是,标题中的“逻辑”并不遵循这种模式,我想这是一个错误——你可以把它读作“操作”。srlsra

答:

2赞 Peter Cordes 8/31/2022 #1

在计算机体系结构术语中,对数字的运算是“算术”(例如 add/sub/mul/div)。

对位的操作通常称为“逻辑”或“逻辑指令”,如“布尔逻辑”。(算术右移,以符号位的副本为单位,通常与其他移位组合为逻辑,即按位操作。

例如,在维基百科的 ALU(算术逻辑单元)文章中,编写它的编辑说操作码“指定了 ALU 要执行的所需算术或逻辑运算”。

Agner Fog 的每条指令性能测试结果的指令表将整数指令分为移动/术/逻辑(按位、移位、位测试)/控制传输/字符串(是的,x86 很时髦)/其他(如和)。同样,FP 算术与逻辑(是的,SIMD 指令集为 FP/SIMD 寄存器提供按位布尔指令)。setccleavecpuid

CPU 没有 C 和 Java 意义上的“逻辑”运算(即使对于整数输入也没有考虑短路求值),因此在计算机体系结构的上下文中,“逻辑”与软件中的含义不同,在软件中,它们需要将按位与逻辑运算符的更复杂操作区分开来。
我假设计算机体系结构的使用更旧。
&&||


你的书并不是说在C或Java中是一个“逻辑操作器”,而是说指令在计算机体系结构的意义上执行一个“逻辑操作”。相应的 C 和 Java 运算符是按位运算符。&and&

机器代码没有运算符,只有指令。(汇编语言对汇编时常量有操作,就像作为另一种编写方式一样。但这纯粹是汇编程序的一个功能,而不是ISA参考手册将讨论的内容。andi x1, x2, (1<<4)-1andi x1, x2, 0x0f


我用谷歌搜索时出现的随机教程或指南中的使用引用computer architecture logical operations