我有一个看起来像这样的宏:
Foo(x) ((x - '!') & 070)
Run Code Online (Sandbox Code Playgroud)
如果我调用以下代码:
Foo('1') => 16
Run Code Online (Sandbox Code Playgroud)
但是,如果我调用以下代码:
(('1' - '!') & 70) => 0
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,这里发生了什么?为什么x & 070计算到x但x & 70计算到0?
我的猜测是左边的额外0是强制60取2个字节而不是1.在这种情况下,不会按位并且如下所示?
0000 0000 0001 0000 '16
0000 0000 0100 0110 & '70
-------------------
0000 0000 0000 0000
Run Code Online (Sandbox Code Playgroud) 我刚刚阅读以下代码:
byte[] bts = {8, 0, 0, 0};
if ((bts[i] & 0x01) == 0x01)
Run Code Online (Sandbox Code Playgroud)
这是否与此相同
if (bts[i] == 0x01)
Run Code Online (Sandbox Code Playgroud)
如果没有,它们之间有什么区别?
在这里尝试做的第一种方式是什么?
我一直在看关于掩码的帖子,但仍然无法理解如何从 C 中的数字中提取某些位。
假设我们有一个int number 0001 1010 0100 1011,那么它的十六进制表示是否x1a4b正确?如果我想知道第 5 到第 7 个数字,101在这种情况下,我应该使用int mask= 0x0000 1110 0000 0000, int extract = mask&number?
另外我如何检查它是否是101?我想==不会在这里工作...非常感谢!
我的处理器只能对 8 位或 16 位无符号整数进行算术运算。
1) 这意味着该处理器的字长是 16 位,对吗?
对单词的操作是 O(1)。
这样做的原因与处理器如何工作的实际电路级实现有关,对吗?
如果我将两个单词相加,结果是一个超过 16 位的数字,我可以说明以下内容吗?
1) 处理器可以添加数字,但只会报告 16 个最低有效数字。
2) 还要报告超过 16 位,处理器必须有软件,允许这些操作大数字(不适合一个字的数字)。
最后,
假设我有一个单词 w,它是一个 16 位数字,我想要八个最低有效数字。我可以做 w & 0xFF。这个操作的时间复杂度是多少?这是 O(1) 也是因为处理器的电路级实现吗?
我一直在阅读C#中的菱形平方算法的实现,它围绕创建无缝纹理.为了计算下一个点,采用以正方形或菱形排列的四个采样点的平均值.如果样本点位于纹理边缘,则将其缠绕到另一侧.此包装似乎使用以下方法完成:
public double sample(int x, int y)
{
return values[(x & (width - 1)) + (y & (height - 1)) * width];
}
Run Code Online (Sandbox Code Playgroud)
一点点的研究告诉我这是一个有点操作员.我之前没有使用它们,维基百科的文章也没有启发.有人可以解释&操作员在这种方法中做了什么吗?
编辑:纹理尺寸总是2的幂
如何有效地生成内部的所有数字0,1,2...n.
(大n).
这样对于固定x和变化k (0 <= k < n),k & x = k.
这是很容易发现,与值的所有位1中k也是1在x.
但我无法计算所有这些.
我曾经DP找到设置位的所有子集和x,以得出所有可能的解决方案.
但是这种方法证明在多个这样的情况下要求不同的效率低效x.
我是否必须考虑需要改变的每一点以获得所有可能性?还有其他有效的方法吗?另外,我当然不想与所有人一起检查n.
algorithm binary bit-manipulation bitwise-operators bitwise-and
我有一张包含答案的表格.这个答案是一组数字的组合.(见下文)
可能的值
2 4 8 16 32 64
如果我有答案24的答案 - 我需要一些方法来计算出唯一可以选择的值是16和8.我被告知这是否在SQL中我将使用按位运算.
我在Access方面相当先进,但往往不使用VBA代码,但我对所有想法持开放态度.
目前我正在尝试按颜色跟踪多个对象.我基于文档代码.
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while(1):
# Take each frame
_, frame = cap.read()
# Convert BGR to HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# define range of blue color in HSV
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
# Threshold the HSV image to get only blue colors
mask = cv2.inRange(hsv, lower_blue, upper_blue)
# Bitwise-AND mask and original image
res = cv2.bitwise_and(frame,frame, mask= mask)
cv2.imshow('frame',frame)
cv2.imshow('mask',mask)
cv2.imshow('res',res)
k = cv2.waitKey(5) & 0xFF
if k == 27: …Run Code Online (Sandbox Code Playgroud) 请注意下面的简单示例:
Module Module1
<Flags>
Public Enum Names
None = 0
Test = 1
Test2 = 2
Test3 = 4
Test4 = 8
End Enum
Sub Main()
Dim test As Names = Names.Test Or Names.Test3
If (test And Names.Test3) = Names.Test3
Console.WriteLine("TRUE")
Else
Console.WriteLine("FALSE")
End If
End Sub
End Module
Run Code Online (Sandbox Code Playgroud)
我的问题的第一部分与这条线有关If (test And Names.Test3) = Names.Test3。
仅仅检查If test And Names.Test3该标志是否存在会更好吗?如果它的计算结果为非零值(意味着该标志存在),那么条件的结果仍然是True。
是否有充分的理由使用第一种方法进行第二种检查?(虽然我的回答是针对VB.NET,但我也想知道这是否是其他地方(例如C#,C ++等)的潜在陷阱)。
此外,关于标记删除,似乎有两种方法可以执行此操作:
test = test Xor Names.Test3 和 test = test And Not Names.Test3 …