相关疑难解决方法(0)

C中用于比特反转的最有效算法(从MSB-> LSB到LSB-> MSB)

实现以下目标的最佳算法是什么:

0010 0000 => 0000 0100

转换从MSB-> LSB到LSB-> MSB.所有位必须反转; 也就是说,这不是字节顺序交换.

c algorithm bit-manipulation

232
推荐指数
11
解决办法
22万
查看次数

反转Python整数的位

给定一个十进制整数(例如65),如何反转Python中的底层位?即.以下操作:

65 ? 01000001 ? 10000010 ? 130
Run Code Online (Sandbox Code Playgroud)

看来这个任务可以分为三个步骤:

  1. 将十进制整数转换为二进制表示
  2. 反转位
  3. 转换回十进制

步骤#2和3似乎很简单(见 SO问题关系到步骤#2),但我卡上的步骤1#.步骤#1的问题是检索带有填充零的完整十进制表示(即65 = 01000001,而不是1000001).

我四处寻找,但似乎找不到任何东西.

python bit-manipulation python-2.7

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

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

C位运算中0x01和0x80代表什么?

我正在尝试反转C中的位顺序(作业问题,主题:按位运算符)。我找到了这种解决方案,但对使用的十六进制值(0x01和0x80)感到有些困惑。

  unsigned char reverse(unsigned char c) {
     int shift;
     unsigned char result = 0;

     for (shift = 0; shift < CHAR_BITS; shift++) {
        if (c & (0x01 << shift))
            result |= (0x80 >> shift);
     }
     return result;
  }
Run Code Online (Sandbox Code Playgroud)

我正在写的并没有讨论这些价值,所以我真的不确定它们是什么。有人可以阐明这个解决方案吗?谢谢!

c bitwise-operators

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

如何执行字节的循环旋转?

我要实现一个向左和向右执行循环旋转的函数.所以我为这两个操作写了同样的东西.例如,如果你正在旋转左边1010变成0101.这是对的吗?

unsigned char rotl(unsigned char c) {
    int w;
    unsigned char s = c;
    for (w = 7; w >= 0; w--) {
       int b = (int)getBit(c, w);//
       if (b == 0) {
           s = clearBit(s, 7 - w);
       } else if (b == 1) {
           s = setBit(s, 7 - w);
       }
    }
    return s;
}

unsigned char getBit(unsigned char c, int n) {
    return c = (c & (1 << n)) >> n;
}

unsigned char setBit(unsigned char …
Run Code Online (Sandbox Code Playgroud)

c bitmask

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

如何将每个位转换为一个字节

我有以下代码将一点变成一个字节.

__device__ UINT64 bitToByte(const UINT8 input) {
    UINT64 b = ((0x8040201008040201ULL * input) >> 7) & 0x0101010101010101ULL; 
    //reverse the byte order <<-- this step is missing
    return b;
}
Run Code Online (Sandbox Code Playgroud)

但是字节顺序错误,字节顺序相反.在CPU上我可以简单地bswap reg,reg解决这个问题,但是我在GPU上做了什么?

或者,我可以使用什么类似的技巧,以便正确地放置字节,即最高有效位转到最高有效字节,这样我就不需要bswap技巧.

c++ cuda bit-manipulation

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

如何在C中翻转和反转int?

例如:

输入:01011111

输出:00000101

我知道我可以使用~翻转数字,但我不知道逆转它的好方法.而且我不确定他们是否可以一起完成.

有没有人有任何想法?

c bit-manipulation

4
推荐指数
1
解决办法
2138
查看次数

这个位在一个字节中的恢复如何工作?

我是编程的新手,我发现这种方法可以反转C中一个字节的位:

//(10000011) -> (11000001)

unsigned char reverse(unsigned char b) {
   b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
   b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
   b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
   return b;
}
Run Code Online (Sandbox Code Playgroud)

由用户发布以回答此问题,但我无法理解它是如何工作的.这些常数意味着什么?

c bit-manipulation bit-shift bitwise-operators or-operator

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

Unix(big endian)代码和linux上的相同代码(little endian),创建不同的输出直径文件

我们有一个Unix代码来创建.xml文件中的直径文件作为输入.当我们转移到Linux平台时,我们需要创建相同的实用程序,代码已成功编译但实用程序没有按预期创建输出文件内容,因为每个字节都会反转位,我认为它是因为Linux是小端.

要写入输出文件的消息块格式为:

ACE_Message_Block* mb = m_pReqMsgBlock;
while (mb) {
                out.write(mb->rd_ptr(), mb->size());
                mb = mb->cont();
           }
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议可以添加多少额外的代码,以便可以以预期的方式写入字节?

c c++ ace diameter-protocol

-3
推荐指数
1
解决办法
282
查看次数