标签: bitwise-or

为什么(无穷大| 0)=== 0?

我正在摆弄JavaScript中的按位运算符,我发现有一件事值得注意.

按位或运算符返回1作为输出比特,如果两个输入比特中的一个是1.所以x | 0总是返回x,因为| 0没有效果:

  • ( 1 | 0 ) === 1
  • ( 0 | 0 ) === 0

但是,当我计算时Infinity | 0,我得到了0.这在我看来是令人惊讶的,因为通过上面的应该得到Infinity.毕竟,( x | 0 ) === x.

我无法在ECMAscript规范中找到明确定义的位置,因此我想知道究竟是什么意思( Infinity | 0 ) === 0.也许Infinity是存储在内存中的方式?如果是这样,怎么仍然可以做一个| 0操作导致它返回0而不| 0应该做任何事情?

javascript bit-manipulation bitwise-operators infinity bitwise-or

23
推荐指数
1
解决办法
1455
查看次数

如何在Kotlin中使用Java的按位运算符?

Java有二进制或 |二进制和 &运营商:

int a = 5 | 10;
int b = 5 & 10;
Run Code Online (Sandbox Code Playgroud)

它们似乎不适用于Kotlin:

val a = 5 | 10;
val b = 5 & 10;
Run Code Online (Sandbox Code Playgroud)

如何在Kotlin中使用Java的按位运算符?

java bitwise-operators bitwise-and bitwise-or kotlin

21
推荐指数
2
解决办法
4931
查看次数

为什么是"||" 或符号?

我知道这||代表逻辑操作"或",但我很好奇是否有人知道选择该符号的历史.是不是因为它碰巧是键盘上未使用的符号?

syntax history operators bitwise-or logical-or

18
推荐指数
1
解决办法
5万
查看次数

是按位还是保证评估排序?

说我有这个代码:

unsigned int func1();
unsigned int func2();
unsigned int func3();

unsigned int x = func1() | func2() | func3();
Run Code Online (Sandbox Code Playgroud)

C++是否保证首先调用func1(),然后调用func2(),然后调用func3()?

或者是否允许编译器以任何顺序调用函数?

此外,编译器是否允许在此处实现短路优化?(例如,如果func1()返回〜0,编译器是否可以决定不打扰调用func2()或func3(),因为它知道它们的返回值不可能影响分配给x的值?)

c++ operator-precedence short-circuiting bitwise-or

15
推荐指数
2
解决办法
722
查看次数

按位操作练习

我有以下练习:数字n0到n7是二进制系统中表示的字节.任务是一点点掉到底部,或者如果它遇到另一个位,它会保持在它之上.这是一个视觉示例:

在此输入图像描述

我意识到如果我对从n0到n7的所有数字应用Bitwise OR,它总是n7的正确结果:

n7 = n0 | n1 | n2 | n3 | n4 | n5 | n6 | n7;
Console.WriteLine(n7); // n7 = 236
Run Code Online (Sandbox Code Playgroud)

不幸的是,我想不出其余字节n6,n5,n4,n3,n2,n1,n0的正确方法.你有什么想法?

c# bit-manipulation bitwise-or

10
推荐指数
2
解决办法
741
查看次数

为什么两个按位或AVX指令?

在AVX中,有两个指令可以执行按位或VORPD和VORPS.文档说:

VORPD (VEX.256 encoded version)
DEST[63:0] <- SRC1[63:0] BITWISE OR SRC2[63:0]
DEST[127:64] <- SRC1[127:64] BITWISE OR SRC2[127:64]
DEST[191:128] <- SRC1[191:128] BITWISE OR SRC2[191:128]
DEST[255:192] <- SRC1[255:192] BITWISE OR SRC2[255:192]
Run Code Online (Sandbox Code Playgroud)

VORPS (VEX.256 encoded version)
DEST[31:0] <- SRC1[31:0] BITWISE OR SRC2[31:0]
DEST[63:32] <- SRC1[63:32] BITWISE OR SRC2[63:32]
DEST[95:64] <- SRC1[95:64] BITWISE OR SRC2[95:64]
DEST[127:96] <- SRC1[127:96] BITWISE OR SRC2[127:96]
DEST[159:128] <- SRC1[159:128] BITWISE OR SRC2[159:128]
DEST[191:160] <- SRC1[191:160] BITWISE OR SRC2[191:160]
DEST[223:192] <- SRC1[223:192] BITWISE OR SRC2[223:192]
DEST[255:224] <- SRC1[255:224] BITWISE …
Run Code Online (Sandbox Code Playgroud)

avx bitwise-or

7
推荐指数
1
解决办法
609
查看次数

C++如何对负数进行按位"或"操作?

当我给变量这样的值:e = 17|-15;,我在编译后得到-15作为答案.我无法理解c ++的算术运算.它如何对负小数执行逐位OR运算?

c++ bitwise-operators bitwise-or

6
推荐指数
2
解决办法
8300
查看次数

c#中大字符串的字符串的按位OR

我有两个相等长度(<= 500)的字符串(1和0),并希望对这些字符串应用逻辑OR.

我应该如何处理这个问题.我正在使用c#.

当我考虑显而易见的解决方案时,读取每个字符并应用OR | 对他们来说,我必须处理apx,250000个字符串,每个长度为500.这会扼杀我的表现.

表现是我​​主要关注的问题.

提前致谢!

c# string bitwise-or

6
推荐指数
1
解决办法
390
查看次数

C++中64位整数的Bitwise(Bitshift)操作

我正在尝试处理位板,这需要我在64位无符号整数中设置一个特定的位.要设置位i,我对所讨论的位板执行按位OR运算,左移数字.

#include <stdint.h>
uint64_t kings = 0ULL; // Also tried unsigned long long int before.
kings |= 1 << i;
Run Code Online (Sandbox Code Playgroud)

它从第0位到第31位工作正常,但不能用于第32位到第63位.我怀疑这是因为右侧的评估恰好是32位整数.因此,我尝试了一个临时变量.

uint64_t temp = 0ULL;
temp |= 1 << i;
Run Code Online (Sandbox Code Playgroud)

也许它仍然将右侧评估为32位整数,或者它是我无法弄清楚的其他问题.要输出整数,我使用的是std :: bitset <64>.例如:

uint64_t kings = 0ULL;
kings |= 1 << 3;
kings |= 1 << 59;
Run Code Online (Sandbox Code Playgroud)

预期小数值:576460752303423496

实际:8

std::bitset<64> x(kings);
std::cout << x;
Run Code Online (Sandbox Code Playgroud)

位值:0000000000000000000000000000000000000000000000000000000000001000

显然,只有国王| = 1 << 3; 工作正常.

总之,第32到63位有什么问题,我该如何解决?

c++ bit-manipulation bit-shift bitwise-or bitboard

5
推荐指数
2
解决办法
8333
查看次数

TSLint 无法识别正确的按位运算符

遗憾的是,这个有效的代码被 TSLint 的默认设置认为是疏忽的:

export const NO_FLAG: number = 0x0000;
export const DESTROY_FLAG: number = 0x0001;
export const NULL_FLAG: number = 0x0100;
export const START_FLAG: number = 0x0200;
export const STOP_FLAG: number = 0x0400;

export function getPackedFlags(destroy: boolean,
                               nullThing: boolean,
                               start: boolean,
                               stop: boolean): number {
    const bitFlags: number = ((destroy) ? DESTROY_FLAG: NO_FLAG) |
                            ((nullThing) ? NULL_FLAG: NO_FLAG) |
                            ((start) ? START_FLAG: NO_FLAG) |
                            ((stop) ? STOP_FLAG: NO_FLAG);
    return bitFlags;
}
Run Code Online (Sandbox Code Playgroud)

执行上述操作会产生这种输出:

tslint --project ./tsconfig.json --format verbose --force

ERROR: (no-bitwise) …
Run Code Online (Sandbox Code Playgroud)

lint bitwise-or typescript tslint

5
推荐指数
1
解决办法
2515
查看次数