标签: bit-manipulation

在ADD,SUB,AND方面实现XOR并在相等/不相等的分支上实现?

我有一个关于在ADD/SUB和分支方面实现XOR的面试问题:在两个数字之间实现Xor操作仅使用以下命令:

  1. 分支如果相等
  2. 分支如果不相等

您可以使用寄存器r3和r4作为额外空间.假设寄存器r1存储第一个数字,r2存储第二个数字

bit-manipulation xor bitwise-xor

-3
推荐指数
2
解决办法
509
查看次数

将int8转换为int7的最快方法

我有一个功能,int8_t val将其转换为int7_t.

//Bit [7] reserved
//Bits [6:0] = signed -64 to +63 offset value
// user who calls this function will use it correctly (-64 to +63)
uint8_t func_int7_t(int8_t val){
    uint8_t val_6 = val & 0b01111111;
    if (val & 0x80)
        val_6 |= 0x40;
    //...
    //do stuff...
    return val_6;
}
Run Code Online (Sandbox Code Playgroud)

操作int8到int7 的最佳和最快方法是什么?我有效率和快速地做到了吗?还是有更好的方法?

如果重要的话,目标是ARM Cortex M0 +

更新:

在阅读了不同的答案后,我可以说这个问题被错误了?(或者我在问题中的代码是对其他人做出错误假设的原因)我有意向int7做int8

所以它将通过无所事事来完成,因为

8位:

 63 = 0011 1111
 62 = 0011 1110
  0 = 0000 0000
 -1 = 1111 …
Run Code Online (Sandbox Code Playgroud)

c c++ performance bit-manipulation

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

使用按位运算符交换整数中的第一个和最后一个数字

我在接受采访时被要求使用按位运算符交换整数中的最后一位和第一位数.尝试了很多,但我找不到解决方案.我怎样才能做到这一点?

c algorithm bit-manipulation

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

C中的isalpha函数仅使用&和<=运算符

这就是问题:

仅使用C(&和<=)中的两个操作,最多5个操作,确定字符是字母小写还是大写.您可以根据需要声明尽可能多的变量,但是您只能进行5位按位和(&)以及<=比较操作.

例:

is_char('b') = 1
is_char('A') = 1
is_char(10) = 0
Run Code Online (Sandbox Code Playgroud)

我可以在6个操作中完成它,但不能在5个中完成....任何人都有想法?

抱歉!!忘了包括没有人可以使用控制流语句:/

c bit-manipulation

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

什么是按位| 操作者

在lamens术语中,什么是按位| 运算符在Javascript中做,为什么:

8 | 1 ; //9
Run Code Online (Sandbox Code Playgroud)

bit-manipulation bitwise-operators

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

使用n位数生成数字(类似于生成n位值的子集)

给定数字'n'和相应的二进制值.我想只使用'n'中设置的位来生成n的所有组合.

例如:如果n = 11且其二进制表示为1011,则组合为:

0000
0001
0010
0011
1000
1001
1010
1011
Run Code Online (Sandbox Code Playgroud)

例2:如果n = 49且其二进制表示为11001,则组合为:

00000
00001
01000
01001
10000
10001
11000
11001
Run Code Online (Sandbox Code Playgroud)

最简单的方法可能是编写一个C子程序来生成这些组合,但是,我需要一些有效的方法/算法来生成这些组合(一些位操作技术类似于bit twiddling hacks).

谢谢.

c algorithm optimization bit-manipulation

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

将最高有效设置位下的所有位置零的最有效方法是什么?

因此,对于以下序列:0001000111000

期望的结果将是:0001000000000

我完全清楚这可以通过使用汇编BSRL(或类似的bit-twiddling hack)找到MSB的索引然后>>将数字移位(索引 - 1),然后<<转换回(索引-1),但是我想知道是否有一个汇编指令或一系列具有更好性能的指令,而不是一个可以做到这一点的笨拙的黑客.

c++ performance x86 assembly bit-manipulation

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

测试Flags Enum中是否只设置了一个位

所以我有一个标志枚举

public Enum test
{
   test1 = 1,
   test2 = 2,
   test3 = 4,
   etc.
}
Run Code Online (Sandbox Code Playgroud)

如何测试那一位,只设置一位?

我以前100%完成了这个,但是我的思绪不是这样的!

c# bit-manipulation enum-flags

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

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

如何从变量中存储单个位?

例如:

我有一个输入= 0x5A ( 0101 1010 ).

我想存储前4位或后4位.

c c++ bit-manipulation bitwise-operators

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