实现以下目标的最佳算法是什么:
0010 0000 => 0000 0100
转换从MSB-> LSB到LSB-> MSB.所有位必须反转; 也就是说,这不是字节顺序交换.
给定一个十进制整数(例如65),如何反转Python中的底层位?即.以下操作:
65 ? 01000001 ? 10000010 ? 130
Run Code Online (Sandbox Code Playgroud)
看来这个任务可以分为三个步骤:
步骤#2和3似乎很简单(见本和本 SO问题关系到步骤#2),但我卡上的步骤1#.步骤#1的问题是检索带有填充零的完整十进制表示(即65 = 01000001,而不是1000001).
我四处寻找,但似乎找不到任何东西.
我正在尝试反转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)
我正在写的书并没有讨论这些价值,所以我真的不确定它们是什么。有人可以阐明这个解决方案吗?谢谢!
我要实现一个向左和向右执行循环旋转的函数.所以我为这两个操作写了同样的东西.例如,如果你正在旋转左边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) 我有以下代码将一点变成一个字节.
__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技巧.
例如:
输入:01011111
输出:00000101
我知道我可以使用~
翻转数字,但我不知道逆转它的好方法.而且我不确定他们是否可以一起完成.
有没有人有任何想法?
我是编程的新手,我发现这种方法可以反转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)
由用户发布以回答此问题,但我无法理解它是如何工作的.这些常数意味着什么?
我们有一个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)
任何人都可以建议可以添加多少额外的代码,以便可以以预期的方式写入字节?