【发布时间】:2010-04-15 10:13:05
【问题描述】:
我必须编写一个宏,将某个变量作为参数,并且对于每两个具有“1”值的连续位,将其替换为 0 位。
例如:10110100 将变为 10000100。
而且,11110000->00000000
11100000->100000000
我在编写那个宏时遇到了麻烦。我试图编写一个宏来获取 wach 位并在下一位相同(并且它们都是 1)的情况下替换它,但它仅适用于 8 位并且它非常不友好......
附:我需要一个宏,因为我正在学习 C,这是我找到的一个练习,我自己无法解决。我知道我可以使用函数来轻松实现...但我想知道如何使用宏来实现。
谢谢!
【问题讨论】:
-
#define TWIDDLE_BITS(var) twiddle_bits(var);现在你所要做的就是实现函数twiddle_bits(var);。:) -
是的,把它写成一个函数,或者解释为什么你需要它作为一个宏(例如,如果你已经分析过它)。
-
如果您能够将其编写为函数,那么将其转换为函数只需很短的一步。 |void foo(int a) { 正文 }|变为 |#define foo(a) 正文|
-
@Josh:除非该函数具有局部变量。
-
好问题。我想了一会儿,但我认为这个问题的单行宏 - 限制让奇数长度运行 1 的第一位 - 非常复杂。也许您应该首先确定所有运行,然后查看运行的长度是否为奇数...