![]() |
1
30
移位的第一个解决方案(移位是移位距离,不能为负,a是要移位的操作数,并且还包含完成时的结果)。所有三个轮班操作都使用功率表。
对于AND、OR和XOR,我无法想出一个简单的解决方案,所以我将通过循环每个位来实现。也许有更好的办法。伪代码假定a和b是输入操作数,c是结果值,x是循环计数器(每个循环必须正好运行16次):
EDIT:我实际测试了所有可能的操作数值(-32768到32767)在0到31之间的移位的正确性,它工作正常(假设整数除法)。对于AND/OR/XOR代码,在我的机器上进行详尽的测试花费的时间太长,但是由于这些代码非常简单,因此无论如何都不应该有边缘情况。 |
![]() |
2
7
在这种环境中,最好是设置为实际使用算术运算符来剥离整数的组件。 例如。
如果将RHS限制为2的常数幂,这些运算符的变换就足够明显了。
|
![]() |
3
6
一个老问题的不完整答案,这里集中在AND,OR,XOR上。一旦这些位运算中的一个找到了解,就可以导出另外两个。有几种方法,其中一种在下面的测试程序中显示(在gcc版本4.6.3(Ubuntu/linaro4.6.3-1ubuntu5)上编译)。
2018年12月,我在解决方案中发现了一个错误。下面注释的XOR只起作用,因为中间结果
|
![]() |
4
3
你可以一点一点地操作(就像markbyers建议的那样),通过提取每一个缓慢的位。 或者您可以加快处理速度,并使用二维查找表来存储结果,例如,两个4位操作数的结果并对其进行操作。你将需要更少的提取比如果你是位操作。 可以使用宏将每个按位操作展开为如下内容:
你需要3个变量来实现这个。
每一个位操作都将围绕类似于
根据您的平台,它可能比使用%和/提取每一位,然后使用乘法将其放回要快。
|
![]() |
5
2
只要你愿意它非常昂贵,是的。 基本上,您将显式地将一个数字放入以2为基数的表示中。你这样做就像你将一个数字放入基数-10(例如,打印出来),也就是说,通过重复除法。 这会将您的数字转换为布尔(或范围为0,1的整数)数组,然后我们添加函数对这些数组进行操作。
在C语言中(当然,在C语言中有位运算符,但是…),实现可能是:
|
![]() |
6
1
只是一些其他的方法16位和
双重的 2位和
32位整数 2位和
16位整数 解决方案 2位和
16位整数 解决方案 :
|
![]() |
Luple · gles glsl逐位操作问题 6 年前 |
![]() |
Dhiraj · Javascript-解析十六进制值 6 年前 |
![]() |
limitless · 数据二进制表示的位运算 7 年前 |
![]() |
Mr. Who · python 2.7上的and逻辑运算[重复] 7 年前 |
![]() |
gnzg · 在本例中,为什么逐位运算符或截断值?[副本] 7 年前 |
![]() |
Cash- · 用位运算符解密隐藏消息 7 年前 |