假设我试图在 C 中创建一个用于按位运算的掩码,例如
uint32_t Mask = 0x00000003;
Run Code Online (Sandbox Code Playgroud)
x 是什么意思?我看到很多用 0x 格式写的数字,我不明白为什么,也找不到对我来说真正有意义的解释,也许我没有寻找正确的东西。
这是什么& ~(minOffsetAlignment - 1)意思?
这是否意味着析构函数的地址?
这是我从中得到的代码片段。
VkDeviceSize 是 uint64_t。
VkDeviceSize getAlignment(VkDeviceSize instanceSize, VkDeviceSize minOffsetAlignment)
{
if (minOffsetAlignment > 0)
{
return (instanceSize + minOffsetAlignment - 1) & ~(minOffsetAlignment - 1);
}
return instanceSize;
}
Run Code Online (Sandbox Code Playgroud) 我有以下内容
a = 340282366920938463463374607431768211455
b = 127
print(a >> b)
Run Code Online (Sandbox Code Playgroud)
结果值为 1,但我不知道为什么。有什么建议吗?我做得对吗?结果是预期的吗?
具体要求是:
Shift A, right by B, where:
A = 340282366920938463463374607431768211455
B = 127
Run Code Online (Sandbox Code Playgroud) 对于此问题,如果参数大于 7,则要求返回 1,否则返回 0。
例如,如果 x 为 8,则该函数将返回 1。如果 x 为 7,则该函数将返回 0。
唯一允许的合法运算符是 (! ~ & ^ | + << >>),它禁止使用其他任何运算符,例如 -、for 循环、while 循环、if 语句等。
我们可以假设系统使用 2 的补码和整数的 32 位表示,以算术方式执行右移,并且在将整数移位超过字大小时会出现不可预测的行为。
我知道不使用 - 操作的减法可以用 ~ 来完成,但说实话,我不知道如何从逻辑上思考这个问题。
在 C++ 中开发 ECS 实现时,我渴望可以简化这个表达式,但老实说,我对按位运算没有足够的信心来弄清楚:
(x & y) == x
Run Code Online (Sandbox Code Playgroud)
如果您有任何关于简化按位表达式的提示,那就太好了,谢谢
编辑:格式化
我在语句中包含这两个条件if来检查是x偶数还是奇数,但似乎在偶数的情况下!(x&1)执行了主体,而没有执行它。ifxx&1==0
考虑到32 或 64 位表示中的1 & 0is和 1 ,我希望两者都给出 0 ,并且如果,比如说,是类似(偶数)的东西,那么它们的按位 和 应该产生 0。因此,我仍然不确定为什么有效。如果我有任何错误的地方,请纠正我。谢谢。0000..01x10010101100!(x&1)
fail = 0;
if (masivs[0][0]>0 | masivs[0][1]>0 | masivs[0][2]>0| masivs[0][3]>0 |masivs[0][4]>0| masivs[0][5]>0|masivs[0][6]>0| masivs[0][7]>0|masivs[0][8]>0|masivs[0][9]>0)
{
fail = 1;
}
else {
fail = 0;
}
Run Code Online (Sandbox Code Playgroud)
我需要检查0行中是否有一些肯定元素,如果是,则需要将失败更改为1.
C++ Xor是^.所以,如果我:
a ^ b
Run Code Online (Sandbox Code Playgroud)
它应该做一个XOR b
但是当值为4246661时0
4246661 ^ 0
Run Code Online (Sandbox Code Playgroud)
它打印:4246661当它真的应该是0.
编辑:哇,我离开了一个在线xor计算器,它给了我奇怪的结果..抱歉
我错过了什么吗?
我读通过教程的一个基于Python的交易平台,它是推荐使用按位的(~,&,|),而不是布尔(not,and,or)运营商合并布尔表达式.
类似因素,可以组合过滤器.使用
&(和)和|(或)运算符组合过滤器.
有这么好的理由吗?我以前从未见过它.我并不完全确定Python中布尔值的所有属性,但我确实认为在C和C++中,布尔值由整数1或0表示,并且可以这样操作.Python类似吗?在这种情况下,我可以看到一个&和|至少是如何工作的.
使用这些按位运算符而不是布尔值的目的是什么?它更快吗?
当我们运行以下代码时,为什么1<<31打印18446744071562067968输出?
#include<iostream>
using namespace std;
int main(){
unsigned long long int i = 1<<31;
cout<<i; // this prints 18446744071562067968
}
Run Code Online (Sandbox Code Playgroud)