Questions tagged «bit-manipulation»

单个位的操作。使用的运算符可能包括按位与,或,异或,非,左移和右移。


9
什么是按位移位(bit-shift)运算符,它们如何工作?
我一直在尝试业余时间学习C,其他语言(C#,Java等)具有相同的概念(并且通常具有相同的运算符)... 我想知道是,在核心层,什么是位移(<<,>>,>>>)这样做,它可以帮助什么问题解决了,什么陷阱潜伏在弯曲?换句话说,这是一个绝对的初学者指南,它对所有好处都有好处。


23
什么是“ 2的补码”?
我正在上计算机系统课程,并且在某种程度上一直在努力与Two's Complement交流。我想了解它,但是我读过的所有内容都没有为我带来帮助。我已经阅读了维基百科文章和其他各种文章,包括我的教科书。 因此,我想开始这个社区Wiki帖子,以定义Two's Complement是什么,如何使用它以及它如何在诸如强制类型转换(从有符号到无符号,反之亦然),按位操作和移位操作等操作期间影响数字。 我希望有一个清晰简洁的定义,使程序员容易理解。

5
一次乘法提取位
我看到在使用了一个有趣的技术,答案到另一个问题,并想好一点理解。 我们获得了一个无符号的64位整数,并且对以下位感兴趣: 1.......2.......3.......4.......5.......6.......7.......8....... 具体来说,我们希望将它们移动到前八位,如下所示: 12345678........................................................ 我们不在乎由指示的位的值.,也不必保留它们。 该溶液是屏蔽掉不需要的位,并且乘以结果0x2040810204081。事实证明,这可以解决问题。 这种方法有多普遍?可以使用这种技术来提取位的任何子集吗?如果不是,如何确定该方法是否适用于特定的一组位? 最后,如何找到正确的(a?)乘法器以提取给定的位?


10
枚举上最常见的C#按位运算
为了我的一生,我不记得如何在位域中进行设置,删除,切换或测试。我不确定还是将它们混在一起,因为我很少需要这些。因此,拥有一个“位备忘单”将是不错的选择。 例如: flags = flags | FlagsEnum.Bit4; // Set bit 4. 要么 if ((flags & FlagsEnum.Bit4)) == FlagsEnum.Bit4) // Is there a less verbose way? 您能否给出所有其他常见操作的示例,最好使用[Flags]枚举以C#语法显示?


1
Java中双波浪号(~~)的含义是什么?
浏览Guava的源代码时,遇到了以下代码(hashCode内部类的实现的一部分CartesianSet): int adjust = size() - 1; for (int i = 0; i < axes.size(); i++) { adjust *= 31; adjust = ~~adjust; // in GWT, we have to deal with integer overflow carefully } int hash = 1; for (Set<E> axis : axes) { hash = 31 * hash …

6
使用按位或0将数字取底
我的一位同事偶然发现了一种使用按位或( var a = 13.6 | 0; //a == 13 我们正在谈论它,并且想知道一些事情。 它是如何工作的?我们的理论是使用这样的运算符将数字转换为整数,从而除去小数部分 这样做有什么好处Math.floor吗?也许更快一点?(双关语无意) 有什么缺点吗?也许在某些情况下不起作用?清晰度很明显,因为我们必须弄清楚这一点,我在写这个问题。 谢谢。


25
四舍五入到2的下一位
我想编写一个函数,该函数返回最接近的2的下一个幂。例如,如果我的输入为789,则输出应为1024。是否有任何方法可以在不使用任何循环而仅使用一些按位运算符的情况下实现这一目标?


9
C#int转换为byte []
我需要将转换int为byte[]一种方法BitConverter.GetBytes()。但不确定是否符合以下规范: XDR有符号整数是一个32位数据,它对[-2147483648,2147483647]范围内的整数进行编码。整数用二进制补码表示。最高和最低有效字节分别为0和3。整数声明如下: 资源: RFC1014 3.2 我如何做一个可以满足上述规范的整数到字节的转换?
172 c#  .net  bit-manipulation  nfs 

11
〜x +〜y ==〜(x + y)始终为假?
此代码是否总是评估为false?这两个变量都是二进制补码整数。 ~x + ~y == ~(x + y) 我觉得应该有一些数字可以满足条件。我尝试测试之间的数字-5000,5000但从未实现平等。有没有办法建立方程式来找到条件的解? 将一个交换为另一个会在我的程序中引起隐患吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.