标签: bit-manipulation

使用按位OR 0来设置数字

我的一位同事偶然发现了一种方法来使用按位或者:

var a = 13.6 | 0; //a == 13
Run Code Online (Sandbox Code Playgroud)

我们在谈论它并想知道一些事情.

  • 它是如何工作的?我们的理论是使用这样的运算符将数字转换为整数,从而删除小数部分
  • 它有什么优势Math.floor吗?也许它快一点?(双关语不打算)
  • 它有任何缺点吗?也许它在某些情况下不起作用?清晰度是显而易见的,因为我们必须弄清楚,而且,我正在写这个问题.

谢谢.

javascript floating-point bit-manipulation

178
推荐指数
6
解决办法
4万
查看次数

四舍五入到下一个2的幂

我想写一个函数,返回最近的2个数的下一个幂.例如,如果我的输入是789,输出应该是1024.有没有任何方法可以实现这一点而不使用任何循环但只使用一些按位运算符?

c optimization bit-manipulation

170
推荐指数
14
解决办法
16万
查看次数

什么是位屏蔽?

我对C编程很新,我遇到了掩码.有人可以向我解释位屏蔽的一般概念和功能吗?非常感谢例子.

c terminology bit-manipulation bitmask bitwise-operators

162
推荐指数
2
解决办法
24万
查看次数

C#int到byte []

我需要转换intbyte[]一种方法来做它是使用BitConverter.GetBytes().但我不确定这是否符合以下规范:

XDR带符号整数是一个32位数据,它编码[-2147483648,2147483647]范围内的整数.整数用二进制补码表示.最高和最低有效字节分别为0和3.整数声明如下:

资源: RFC1014 3.2

我怎样才能进行满足上述规范的int到byte转换?

.net c# nfs bit-manipulation

158
推荐指数
6
解决办法
27万
查看次数

~x + ~y ==〜(x + y)总是假的?

此代码是否总是评估为false?这两个变量都是两个补码签名的整数.

~x + ~y == ~(x + y)
Run Code Online (Sandbox Code Playgroud)

我觉得应该有一些数字满足条件.我试过测试之间的数字-5000,5000但从未达到平等.有没有办法建立一个方程来找到条件的解?

将一个换成另一个导致我的程序中的一个阴险的错误?

c signed bit-manipulation twos-complement

153
推荐指数
9
解决办法
8123
查看次数

^ = 32背后的想法是什么,将小写字母转换为高位字母,反之亦然?

我在解决代码问题上遇到了一些问题.通常我首先检查字符是英文字母的上部还是下部,然后减去或添加32以将其转换为相应的字母.但我发现有人^= 32做了同样的事情.这里是:

char foo = 'a';
foo ^= 32;
char bar = 'A';
bar ^= 32;
cout << foo << ' ' << bar << '\n'; // foo is A, and bar is a
Run Code Online (Sandbox Code Playgroud)

我已经搜索了这方面的解释并没有找到答案.那么为什么会这样呢?

c++ ascii bit-manipulation

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

如何删除C中的标志?

有一个变量,它包含一些标志,我想删除其中一个.但我不知道如何删除它.

这是我如何设置标志.

my.emask |= ENABLE_SHOOT;
Run Code Online (Sandbox Code Playgroud)

c flags bit-manipulation

142
推荐指数
3
解决办法
8万
查看次数

为什么这个随机值有25/75分布而不是50/50?

编辑:所以基本上我要写的是1位哈希值double.

我想映射double到50/50 truefalse50/50的机会.为此,我编写了一些选择随机数的代码(仅作为一个例子,我希望在有规律的数据上使用它并仍然得到50/50的结果),检查它们的最后一位并y在它为1时递增,或者n如果它是0.

但是,此代码不断导致25%y和75%n.为什么不是50/50?为什么这么奇怪,但直截了当(1/3)分布?

public class DoubleToBoolean {
    @Test
    public void test() {

        int y = 0;
        int n = 0;
        Random r = new Random();
        for (int i = 0; i < 1000000; i++) {
            double randomValue = r.nextDouble();
            long lastBit = Double.doubleToLongBits(randomValue) & 1;
            if (lastBit == 1) {
                y++;
            } else {
                n++;
            }
        }
        System.out.println(y + " " …
Run Code Online (Sandbox Code Playgroud)

java random double bit-manipulation probability

139
推荐指数
3
解决办法
9092
查看次数

为什么XOR是组合哈希的默认方式?

假设您有两个哈希H(A)并且H(B)您想要将它们组合在一起.我已经读到了将两个哈希值组合在一起的好方法XOR,例如XOR( H(A), H(B) ).

我发现的最佳解释在这里简要介绍了这些哈希函数指南:

对具有大致随机分布的两个数字进行异或,导致另一个数字仍具有大致随机分布*,但现在取决于这两个值.
...
*在两个数字相结合的每个比特,一个输出0,如果两个比特相等,否则为1.换句话说,在组合的50%,1将输出.因此,如果两个输入位各有大约50-50的机会为0或1,那么输出位也是如此.

你能解释为什么XOR应该是组合散列函数(而不是OR或AND等)的默认操作的直觉和/或数学吗?

hash cryptography bit-manipulation probability xor

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

解释使用位向量来确定所有字符是否都是唯一的

我很困惑有点矢量如何工作(不太熟悉位向量).这是给出的代码.有人可以带我走过这个吗?

public static boolean isUniqueChars(String str) {
    int checker = 0;
    for (int i = 0; i < str.length(); ++i) {
        int val = str.charAt(i) - 'a';
        if ((checker & (1 << val)) > 0) return false;
        checker |= (1 << val);
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

特别是,checker做什么?

java string bit-manipulation bitvector

133
推荐指数
7
解决办法
5万
查看次数