- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的问题如下,我正在尝试正确创建 setValue(unsigned int & var, int k, unsigned int i, int val) 的函数
var 是引用传递值,int k 是分区,i 是我们的分区索引,val 是我们传递给引用的值。现在,我的问题是如何制作面具。
这是一个示例,我将使用 8 位而不是 unsigned int 的完整 32 位。
假设 var 具有以下值:(1011) (1001) 我们的 k = 2。现在,假设我们希望将值 5 传递给索引 1。因此我们需要将 var 设为:(1011) (0101)。因此,为了到达那里,我们需要进行以下逻辑组合。
var & 掩码,其中掩码等于 (1111) (0000)变量 = (1011) (0000)然后我们做,var = val |值
(1011) (000)(0000) (0101) |
(1011) (0101) 我的问题是如何创建 mask 功能?这是我尝试创建它的代码片段(顺便说一句,在我们进入函数之前,我已经将我的 var 设置为 0):
bitSize = sizeof(unsigned int)*8;
partionSize = (bitSize/k);
shiftCount = partionSize*i;
mask = ~((1<< partionSize)-1) << shiftCount;
var = var & mask;
val = val << shiftCount;
var = var | val;
结果,如果我说我的 k = 2,并且我输入以下 2 个值 5 和 3 是:
5:
到目前为止的 shiftc 计数是:0面具的值(value)是:4294901760在函数内部,var 到目前为止是 5。
3:
到目前为止的类次数是:16掩码的值为:0var 的值为 196608。现在,二进制的 196608 是 110000000000000000,所以很明显它只移动了 3 16 次,甚至没有正确地将 5 保存在那里。否则它应该是 110000000000000101。感谢您的帮助。
编辑
我已经将 mask 部分编辑成现在这样:
if( i == 0)
{
mask = ~((1<< partionSize)-1);
}
else
{
mask = ~(((1<< partionSize)-1) << shiftCount);
}
这似乎已经奏效了。因为现在,如果我在 k = 2 时输入 567 和 346(如果有人想知道为什么它总是 2,我会使用两个让我的测试更轻松)。
var的最终值为22676023,二进制为:01010110100000001000110111567是:01000110111而 346 是:0101011010
这两个值现在似乎都存在于我们的变量中。向更熟练的 C++ 程序员提问,这对我来说似乎是有效的逻辑吗?
最佳答案
这是位掩码的例子:假设我们有字母“A”到“D”
A = 1 //on
B = 0 //off
C = 1
D = 1
我们想要一个看起来像 1011
我们从 mask = 1
开始,然后将其与 1 进行或运算。
对于字母 a:mask = mask | 1
或简单地 mask |= 1
对于字母 b:我们什么都不做,因为它没有被设置,等等
mask = 1;
a => mask |= 1 //( mask |= (1<<0) )
//b => mask |= 2; //( mask |= (1<<1) )
c => mask |= 4; //( mask |= (1<<2) )
d => mask |= 8; //( mask |= (1<<3) )
掩码结果是 1101
。请注意,之前我说过我们需要 1011
,除了位颠倒之外,它们是一样的。
void SetValue(unsigned int &mask, int index, int turn_on)
{
if (turn_on)
mask |= (1 << index);
}
int GetValue(unsigned int mask, int index)
{
return (mask >> index) & 1;
}
int main()
{
unsigned int mask = 1;
SetValue(mask, 0, 1);//A
SetValue(mask, 1, 0);//B
SetValue(mask, 2, 1);//C
SetValue(mask, 3, 1);//D
//up to SetValue(mask, 31, 1);
//mask is now equal to 13, or 1101
std::cout << mask << std::endl;
for (int i = 0; i < 4; i++)
std::cout << GetValue(mask, i);
//This prints 1011 (reverse of 1101).
//Again this has to do with the way we
//are printing the bits.
std::cout << "\n";
}
关于c++ - 如何制作面具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32275305/
我正在尝试在图像上绘制蒙版,蒙版是 body-pix (在 NodeJS 中)完成的处理的结果。出于性能原因,我想使用 OpenCV 来绘制蒙版,而不是 htmlcanva。 const se
在我的数据框中,我想用 nan 替换低于 1 和高于 5 的每个值。 此代码有效 persDf = persDf.mask(persDf 5)) 我不知道为什么会这样。我已经检查了手册页和关于明显类
我正在使用 Explaining and Harnessing Adversarial Examples 中的 FGSM 方法实现对抗性训练使用自定义损失函数: 使用自定义损失函数在 tf.keras
我有以下功能: def delta(r, dr): res = np.zeros(r.shape) mask1 = (r >= 0.5*dr) & (r = 0.5*dr) & (r <=
我有一个给定的数据框,我希望每一行都能够选择高于该行给定百分位数的值。 让我们考虑这个数据框: df = pd.DataFrame({'A' : [5,6,3,4, 0,5,9], 'B' : [1,
目前遇到一个技术问题,想改进之前的实现,情况是: 我有 5 个 GPIO 引脚,我需要使用这些引脚作为硬件标识符,例如: pin1: LOW pin2: LOW pin3: LOW pin4: LOW
我有一个字典,其中包含多个 pandas 掩码作为特定数据帧的字符串,但我找不到使用这些掩码的方法。 这是一个简短的可重现示例: df = pd.DataFrame({'age' : [10, 24,
我有一个 bool 掩码列表,该列表是通过将不同的搜索条件应用于数据框而获得的。这是一个包含 4 个掩码的示例列表: mask_list = [mask1, mask2, mask3, mask4]
我在 pandas 掩码子集上执行了一项任务: pdxy = pd.DataFrame(data,columns=['X','Y','C','CC']) mask = pdxy[:]['Y']==8
所以我有一个输入,默认情况下我希望它的值为 0.00。很简单。 当用户开始输入时,我想从右边开始填充。所以当他们输入“5”时,输入将显示“0.05”。然后他们输入一个零,输入变为“0.50”,依此类推
我是一名优秀的程序员,十分优秀!