根据我的理解,&运算符类似于&&运算符,除了&&仅检查第二个是否第一个为真,而&检查两者而不管第一个的结果.基本上&&只需节省一点时间和力量.
如果是这样,那么这段代码是如何工作的呢?
int l = 0;
if ((l & 8) != 0 && (l & 4) == 0){ do something}
Run Code Online (Sandbox Code Playgroud)
什么是(l & 8)和(l & 4)呢?在这种情况下做什么&做什么?
请帮助解决这个问题并解释逻辑.我不知道&运营商是如何在这里工作的.
void main() {
int a = -1;
static int count;
while (a) {
count++;
a &= a - 1;
}
printf("%d", count);
}
Run Code Online (Sandbox Code Playgroud) 在下面的Java程序中,我无法理解这一行的作用:
wert = (wert * mult + inkr) & 0x7FFFFFFFL;
Run Code Online (Sandbox Code Playgroud)
我理解按位运算符在条件中的作用,但主要有两个数字(十六进制是Java中Integers的最大值).我不明白,为什么&0x7FFFFFFFL; 在这条线上甚至有一些影响力.在我看来,变量wert应该只有(wert*mult + inkr)的值,因为它是真的.虽然我想出了&0x7FFFFFFFL; 只有当(wert*mult + inkr)为负时,显然确实会产生一些影响.为什么以及在这一行中究竟发生了什么?
注释:这应该是用于模拟彩票绘图的程序.我知道程序中的错误,评论的位置.但这对我来说现在并不重要.如果有人能告诉我不是特定于Java特定的问题,那还是很好的:有什么意义得到变量mult和inkr?
public static void main(String args[]) {
int kugeln = 49;
int ziehen = 6;
int mult = 1103515245;
int inkr = 12345;
long wert = System.currentTimeMillis();
int zahlen[] = new int[kugeln];
for(int i = 0; i < kugeln; i++) {
zahlen[i] = i + 1;
wert = (wert * mult …Run Code Online (Sandbox Code Playgroud) 任何人都可以详细解释这完成了什么?我试图学习c并且很难绕过它.
void tonet_short(uint8_t *p, unsigned short s) {
p[0] = (s >> 8) & 0xff;
p[1] = s & 0xff;
}
void tonet_long(uint8_t *p, unsigned long l)
{
p[0] = (l >> 24) & 0xff;
p[1] = (l >> 16) & 0xff;
p[2] = (l >> 8) & 0xff;
p[3] = l & 0xff;
}
Run Code Online (Sandbox Code Playgroud) 我有以下内容:
int a = 10001000;
int b = 10000000;
Run Code Online (Sandbox Code Playgroud)
我想要以下输出:
(a&b) = 10000000;
Run Code Online (Sandbox Code Playgroud)
但我的问题是java在使用"&"操作之前转换为二进制,我真的希望能够以上述方式在整数上使用它.可以这样做吗?
以下两个代码序列产生相同的结果:
uint mod = val % 4;
uint mod1 = val & 0x3;
Run Code Online (Sandbox Code Playgroud)
我可以用两者来计算相同的结果.我知道在硬件中,&操作员比%操作员更容易实现.因此我希望它比%运营商有更好的性能.
我可以一直认为&性能更好或相同吗?编译器会自动优化吗?
我注意到在JS中使用按位AND运算符的奇怪行为:
console.log((0xd41ddb80 & 0xd41ddb80).toString(16))Run Code Online (Sandbox Code Playgroud)
结果是-2be22480,但我期待0xd41ddb80
这种行为的原因是什么?
我刚刚开始学习有点操作,想要问为什么和1(&1)按位操作总是返回0或1.
在C语言中,我经常if以这种形式看到语句:
#define STATUS 0x000A
UINT16 InterruptStatus;
if (InterruptStatus & STATUS)
{
<do something here....>
}
Run Code Online (Sandbox Code Playgroud)
如果我有这样的陈述,处理时间或任何其他原因会不同于为什么这不是首选/替代方式?
#define STATUS 0x000A
UINT16 InterruptStatus;
if (InterruptStatus == STATUS)
{
<do something here....>
}
Run Code Online (Sandbox Code Playgroud) 给定 l 和 r,找到从 l 到 r 的按位与等于 0 的自然数对的数量。
限制:
1 <= l <= r <= 10^9
r - l <= 10^6
我只能写一个蛮力。有谁知道如何解决这个任务?范围大小最大为 10^6,因此我们可以以某种方式使用它。
bitwise-and ×10
c ×4
java ×3
javascript ×2
algorithm ×1
c++ ×1
equality ×1
hex ×1
modulo ×1
performance ×1