我无法搜索| 在谷歌.如果你在一个你试图解释的软件源代码中找到它,你不知道它做了什么,你不能向其他人寻求帮助,你怎么知道它的作用?
我在问是否可以通过按位运算来改善相当大的整数矩阵乘法。矩阵很小,元素是小的非负整数(small表示最多20个)。
为了使我们专注,我们要非常具体,说我有两个3x3矩阵,它们的整数项0 <= x <15。
以下简单的C ++实现执行了100万次,执行时间约为1s(以linux衡量)time。
#include <random>
int main() {
//Random number generator
std::random_device rd;
std::mt19937 eng(rd());
std::uniform_int_distribution<> distr(0, 15);
int A[3][3];
int B[3][3];
int C[3][3];
for (int trials = 0; trials <= 1000000; trials++) {
//Set up A[] and B[]
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
A[i][j] = distr(eng);
B[i][j] = distr(eng);
C[i][j] = 0;
}
} …Run Code Online (Sandbox Code Playgroud) 这可能是非常基本的......但我似乎不明白:
如何
(2 & 1) = 0
(3 & 1) = 1
(4 & 1) = 0
Run Code Online (Sandbox Code Playgroud)
等等..
上面的这种模式似乎有助于找到偶数
或者
(0 | 1) = 1
(1 | 1) = 1
(2 | 1) = 3
(3 | 1) = 4
(4 | 1) = 5
(5 | 1) = 5
Run Code Online (Sandbox Code Playgroud)
我知道布尔代数是如何在位之间工作的。但我不明白布尔代数如何处理整数(至少在 C# 中)。
提前致谢。
我来写代码:
scala> val a = 0 | 1
a: Int = 1
scala> val a = 0 | 1 | 2
a: Int = 3
scala> val a = 0 | 1 | 2 | 3
a: Int = 3
scala> val a = 0 | 1 | 2 | 3 | 4
a: Int = 7
Run Code Online (Sandbox Code Playgroud)
我期望的唯一结果| 运算符是第一个命令的结果。我看到它的行为就像一个逻辑,还是在第二个命令中添加了元素。
有人可以解释| 运算符使用整数作为运算符?
我从未真正理解的一件事是为什么在许多库中,常量定义如下:
public static final int DM_FILL_BACKGROUND = 0x2;
public static final int DM_FILL_PREVIOUS = 0x3;
public static final int TRANSPARENCY_MASK = 1 << 1;
public static final int TRANSPARENCY_PIXEL = 1 << 2;
Run Code Online (Sandbox Code Playgroud)
怎么了0x和<<东西?为什么人们不只是使用普通的整数值?
我在书中读到了这句话:
逻辑和移位指令分别对位进行操作与算术不同,后者对整个字进行操作
用于隔离字段.通过遮蔽或来回移动.
我根本无法理解这两句话.
移位和算术指令都会改变所有位(在某些情况下),并且在算术中,逐位添加位以计算答案.
那么这部分的含义是什么?"指令单独操作指令不同于算术,它对整个单词进行操作"?
我的第二个问题:
我不知道对这部分有任何想法你能解释一下吗:
用于隔离字段.通过遮蔽或来回移动.
我的第三个问题:什么是逻辑指令.他的意思是AND,例如?你能解释一下吗?
我对速度感兴趣,而不是好看的代码,这就是为什么我使用数组而不是列表(整数).
我有一个数组看起来像:0,1,0,1,1,0,1,0,1,1,1,0,0,1
我对每个数字的位置感兴趣,所以我可以随后随机选择一个.
所以我所做的是循环遍历数组以获取每个1的位置编号,然后创建一个如下所示的新数组:2,4,5,7,9,10,11,14
在这里可以使用bitwise吗?我不知道
代码看起来像:
Private Function theThing() As Integer()
Dim x As Integer
'arIn() would be a parameter
Dim arIn() As Integer = {0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1}
Dim ar() As Integer = Nothing
Dim arCount As Integer = -1
For x = 1 To arIn.GetUpperBound(0)
If arIn(x) = 1 Then
arCount += 1
End If
Next
If arCount > -1 Then
'using redim preseve is slower than the …Run Code Online (Sandbox Code Playgroud) #include <iostream>
int main(int argc, char* argv[])
{
unsigned long mask = 0x00000001;
unsigned long mask1 = 0x00000001;
unsigned long mask2 = 0x00000010;
if ((mask and mask1) && (mask and mask2))// CONDITION_1 is True.
std::cout << "Ohhhhhhh..." << std::endl;
if ((mask & mask1) && (mask & mask2)) //CONDITION_2 is False.
std::cout << "No Output..." << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我认为CONDITION_1和CONDITION_2都是假的,但我的想法显然是错误的,为什么'和'和'&'在C++中不一样?
我有两个布尔数组:
arr1 = [true, false, false, true]
arr2 = [false, false, false ,true]
Run Code Online (Sandbox Code Playgroud)
我想创建一个只有当arr1和arr2包含true但每个数组只有一个true时才返回true的函数.例如,对于上面的数组,函数必须返回false.如果数组是这样的:
arr1 = [true, false, false, false]
arr2 = [false, false, false ,true]
Run Code Online (Sandbox Code Playgroud)
该函数将返回true.您是否知道快速实现这一目标的方法而无需计算元素?