标签: bits

以字节交换每对位

这是NVIDIA代表在招聘会上提出的一个问题:

编写小而有效的代码来交换一个字节内的每对位; 例如,10 11 01 10应该成为01 11 10 01.

有没有比for通过每个其他索引循环更"有效"的方法呢?我的代码很小,但我想不出这可能比循环更有效"...我猜测可能有办法使用XOR来避免循环,但我不能想办法.

谢谢!

byte swap bits

7
推荐指数
2
解决办法
4206
查看次数

在C#中等效的Double.doubleToLongBits?

有一个Java方法Double.doubleToLongBits基本上得到一个double并返回一个long相同的位.
我怎么能在C#中做到这一点?
谢谢

c# java double bits long-integer

7
推荐指数
2
解决办法
2034
查看次数

名称为16位和32位

8位称为"字节".如何调用16位?"短"?"字"?

32位怎么样?我知道"int"依赖于CPU,我对普遍适用的名称感兴趣.

bits terminology conventions

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

解析Yann LeCun的MNIST IDX文件格式

我想了解如何打开这个版本的MNIST数据集.例如,训练集标签文件train-labels-idx1-ubyte定义为:

TRAINING SET LABEL FILE (train-labels-idx1-ubyte):
[offset] [type]          [value]          [description]
0000     32 bit integer  0x00000801(2049) magic number (MSB first)
0004     32 bit integer  60000            number of items
0008     unsigned byte   ??               label
0009     unsigned byte   ??               label
........
xxxx     unsigned byte   ??               label
Run Code Online (Sandbox Code Playgroud)

我发现一些似乎有效的在线代码,但不明白它是如何工作的:

with open('train-labels-idx1-ubyte', 'rb') as f:
    bytes = f.read(8)
    magic, size = struct.unpack(">II", bytes)

print(magic) # 2049
print(size)  # 60000
Run Code Online (Sandbox Code Playgroud)

我的理解是struct.unpack将第二个参数解释为两个4字节整数的大端字节字符串(参见此处).bytes但是,当我实际打印出值时,我得到:

b'\x00\x00\x08\x01\x00\x00\xea`'
Run Code Online (Sandbox Code Playgroud)

第一个四字节整数是有意义的:

b'\x00\x00\x08\x01'
Run Code Online (Sandbox Code Playgroud)

前两个字节为0.下一个表示数据是无符号字节.并且0x01表示标签的一维矢量.假设到目前为止我的理解是正确的,接下来的三个(四个?)字节会发生什么: …

python binary bits mnist

7
推荐指数
2
解决办法
4864
查看次数

为什么计算位数有用?

我已经看到了关于计算insert type of输入中设置位数的众多问题,但为什么它有用呢?

对于那些寻找有关位计数的算法的人,请看这里:

  1. 计算无符号长整数序列中的公共位
  2. 计算unsigned int中位转换次数的最快方法
  3. 如何计算32位整数中的设置位数?

language-agnostic computer-science bits bit-manipulation bitcount

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

将整数转换为位

我有字节到二进制字符串函数,

std::string byte_to_binary(unsigned char byte)
{
    int x = 128;
    std::ostringstream oss;
    oss << ((byte & 255) != 0);

    for (int i = 0; i < 7; i++, x/=2)
       oss << ((byte & x) != 0);

    return oss.str();
}
Run Code Online (Sandbox Code Playgroud)

如何以相同的方式将int写入位?我不想在二进制字符串的开头加上额外的0,这就是为什么我无法弄清楚每次如何创建一个可变长度.另外,我没有使用std :: bitset.

c++ bits bitwise-operators

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

怎么(i << 48)| ((i&0xffff0000L)<< 16)| ((i >>> 16)&0xffff0000L)| (i >>> 48)工作?

这是Long中反向的实现:

public static long reverse(long i) {
        // HD, Figure 7-1
    i = (i & 0x5555555555555555L) << 1 | (i >>> 1) & 0x5555555555555555L;//1
    i = (i & 0x3333333333333333L) << 2 | (i >>> 2) & 0x3333333333333333L;//2
    i = (i & 0x0f0f0f0f0f0f0f0fL) << 4 | (i >>> 4) & 0x0f0f0f0f0f0f0f0fL;//3
    i = (i & 0x00ff00ff00ff00ffL) << 8 | (i >>> 8) & 0x00ff00ff00ff00ffL;//4
    i = (i << 48) | ((i & 0xffff0000L) << 16) |
        ((i >>> 16) & 0xffff0000L) …
Run Code Online (Sandbox Code Playgroud)

java bits long-integer

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

如何获得第n位值

我对整个位移和c ++都很陌生.

假设我有一个uint8_t 00100100(36),我想检查第3位是否已设置.以下是我现在只做一点的代码.

uint8_t x = 36;
    if(x&1<<3)
        printf("is set");
Run Code Online (Sandbox Code Playgroud)

如何检查第3 位第6位是否已设置?我想检查几个比特组合,如第5或第7或第8.

什么是最优雅的方式呢?

c++ bits bit-shift

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

加倍和除以浮点值

我有一个函数,我相信将int转换为浮点值,拆分为值的符号指数和分数组成部分.使用IEEE 754表示浮点值.

在此输入图像描述

unsigned test(unsigned x) {    
    // split the given bits of sign exponent and fraction, combine to return

    unsigned int sign = (x & 0x80000000) >> 31;
    unsigned int expo = (x & 0x7F800000) >> 23;
    unsigned int frac = (x & 0x007fffff);

    return (sign << 31) | (expo << 23) | frac;
}
Run Code Online (Sandbox Code Playgroud)

但我不确定如何从这个浮点表示计算减半或加倍的值.

unsigned doubled(unsigned x) {
    // get float
    // float = unsigned int to float
    // doubleFloat  = 2*f
    // if float is not a …
Run Code Online (Sandbox Code Playgroud)

c c++ floating-point bits

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

有人可以解释以下 xor 属性吗

我在论坛上提到给定的n数字数组:

arr[0........n-1]
Run Code Online (Sandbox Code Playgroud)

以下条件成立,^xor运算符`

f(l,r) = f(0,r) ^ f(0,l-1)
Run Code Online (Sandbox Code Playgroud)

在哪里 f(l,r) = arr[l]^arr[l+1]^........arr[r]

我检查了上面的数组数量和不同值landrYES,这是真的。但我不明白怎么办?

有人可以解释一下这背后的逻辑吗?

algorithm bits xor

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