【发布时间】:2020-12-01 02:54:03
【问题描述】:
我正在研究按位逻辑运算(AND、OR 等)。例如。
15 AND 24 可以如下计算。
- 将给定的数字转换为二进制形式。
01111 和 11000
- 对两个数字的每个位执行按位与运算。
= 01000
- 将二进制转换为十进制。
8
我想知道,
-
有没有直接的方法(不转换成二进制形式)来得到这个操作的结果?如果不是,请告诉我们获得结果的最佳方法是什么。我需要对 170141183460469231731687303715884105728 或以上的非常大的数字执行此操作。
-
我正在尝试在 C 中实现它,我无法在 C 中存储大于 18446744073709551615 的整数,所以我想知道如何实现对大数的运算,因为我们不能直接存储这些数字。
是否有任何算法可以获取这些数字的块并执行这些操作。例如
0170 1411 8346 0469 2317 3168 7303 7158 8410 5728
&
1321 3221 3654 5646 5646 6546 6489 9873 9765 9721
-------------------------------------------------
result = very large number
我可以使用任何在线资源来对此进行更多了解吗?
【问题讨论】:
-
不,没有更直接的方法。最有效的方法是特定于语言的,但大多数语言都提供了最有效的方法来实现位运算符。
-
许多当前语言在整数上实现
AND为a & b。垂直条通常用于OR:a | b。请注意,您的最大值是 127 位长,因此您可能需要一个特殊的超长整数数据类型。 Python等语言支持无限大小的整数,所以你可以直接对这些整数调用a & b。 -
@JohanC 好吧,你当然可以隐藏在语言结构后面,但内部逻辑仍然是基于二进制的
-
请记住,您应该让计算机以二进制形式存储其值,以便计算机可以直接处理这些值。只有在与人类交互时才需要与十进制进行转换。不要将值存储为十进制,然后在按位逻辑运算之前将十进制转换为二进制,然后再转换回十进制进行存储。我见过有人这样做,看到这种低效率是痛苦的。
标签: c bitwise-operators logical-operators bigint integer-arithmetic