问题标签 [bitwise-operators]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2597 浏览

c# - 长型,左移和右移操作

继续我之前的问题 为什么我不能从 long 派生?

我发现了一个有趣的问题。

第一步:

结果:4294967296。

第二步。

结果:0

啊哈,所以在这里我假设 4294967296 == 0xFFFFFFFF

让我们检查

结果:4294967295。失败。

让我们仔细检查一下

结果: 1. 失败。

唯一的解释是,因为我使用 long ,其中一些位保留用于符号。在 CI 中将使用 unsigned long。你们觉得怎么样?

0 投票
4 回答
16161 浏览

c - C指针上的位移?

我正处于这个 C 项目的中间,我希望提高内存效率。在某些情况下,我使用我编写的动态数组结构的 void *s 来保存位。我希望使用所有 64(在这种情况下)位。

我很快意识到你实际上不能对指针进行任何位操作。所以我的解决方案如下:

这可以完成工作,但这只是因为在我的计算机上,长整数和指针的大小相等。在所有(或大多数)架构中都会出现这种情况吗?

我真正的问题是:有没有更正确的方法来对指针进行位操作? 我曾认为这种方法在 C 中有些常见(将位打包到 void * 中),但我可能弄错了......

0 投票
6 回答
15946 浏览

c# - C# 中的 Java 三重移位运算符 (>>>) 的等价物?

Java 运算符的等价物(在 C# 中)是>>>什么?

(澄清一下,我指的不是>>and<<运算符。)

0 投票
3 回答
1332 浏览

c# - 按位或:C# 与 C++

)。假设您有两个整数,a = 8,b = 2。在 C++ 中,a | b 是真的。我使用这种行为来处理标志集合。例如,标志将是 1、2、4、8 等等,它们的任何集合都是唯一的。我在 C# 中找不到如何做到这一点,因为 | 和 & 运算符的行为不像在 C++ 中那样。我阅读了有关 C# 中运算符的文档,但我仍然不明白。

编辑:

不幸的是,我似乎在某个地方搞砸了。以这段代码为例:

对于我放入标志的任何值,这都会返回“y”。这很明显,因为 3 | 8 将是 11。嗯......我想做的是收集一个标志:1、2、4、8、16,当我给出一个数字时,能够确定它是什么标志。

0 投票
6 回答
7282 浏览

java - 将数字转换为具有完整填充的二进制字符串?

我在java中有一个长变量并将其转换为二进制字符串,例如

长变量 = 24; Long.toBinaryString(val);

现在这仅打印 7 位,但我需要显示所有 64 位,即所有前导零,我该如何实现呢?

原因是我需要遍历每个位并根据状态执行操作,有更好的方法吗?

0 投票
12 回答
18632 浏览

c++ - 你会使用 num%2 还是 num&1 来检查一个数字是否是偶数?

好吧,至少有两种低级方法可以确定给定数字是否为偶数:

我认为第二种选择更加优雅和有意义,这是我通常使用的一种。但这不仅仅是品味问题。实际性能可能会有所不同:通常按位运算(例如这里的逻辑与)比 mod(或 div)运算效率更高。当然,您可能会争辩说某些编译器无论如何都能够优化它,我同意……但有些不会。

另一点是,对于经验不足的程序员来说,第二个可能更难理解。关于这一点,我会回答说,如果这些程序员花那么短的时间来理解这种陈述,它可能只会使每个人受益。

你怎么看?

仅当给定的两个片段是num无符号整数或具有二进制补码表示的负数时才是正确的。- 正如一些评论所说的那样。

0 投票
5 回答
280 浏览

language-agnostic - 使用按位运算符检查整数是否为 2^1-2^j 形式的单行器

我想要一个单行代码来检查给定整数是否为 2 i - 2 j形式。(使用位运算符)

0 投票
6 回答
3360 浏览

c# - 按位或似乎隐式转换为 long。这可以避免吗?

我是一名试图迁移到 C# 的 Java 程序员,这个问题让我有点难过:

第一行编译得很好。第二个没有。似乎认识到有一个带有符号位的常量,并且由于某种原因它决定将结果转换为 long,从而导致错误:

无法将类型“long”隐式转换为“int”。
存在显式转换(您是否缺少演员表?)

到目前为止我的修复是:

其中涉及演员,但仍然留下警告:

用于符号扩展操作数的位或运算符;
考虑先转换为更小的无符号类型

以错误/警告/无长时间的方式表达这一点的正确 C# 方式是什么?

0 投票
41 回答
105281 浏览

language-agnostic - 位运算符的真实世界用例

以下位运算符的一些实际用例是什么?

  • 异或
  • 不是
  • 或者
  • 左/右移位
0 投票
5 回答
33593 浏览

javascript - javascript trunc() 函数

我想在javascript中截断一个数字,这意味着去掉小数部分:

截断 ( 2.6 ) == 2

截断 (-2.6 ) == -2


经过大量基准测试后,我的答案是: