7

请告诉我如何打印一点,例如printf("%d",bit);.

4

6 回答 6

20

如果 bit 只是一个 int ,它在最低有效位中包含您想要的值,那么:

printf("%d", bit & 0x1);

应该这样做。& 正在对仅设置第一个有效位的数字进行二进制与运算,因此您将删除整数中的所有其余位。

于 2008-12-08T15:55:37.513 回答
10

如果您需要概括的不仅仅是 Herms,您可以这样做:

#define IsBitSet(val, bit) ((val) & (1 << (bit)))

/* ... your code ... */

printf ("%c", IsBitSet(bit, 0) ? '1' : '0');

printf 相当于 Herms 的答案。

如果你在谈论 C 中的位域,你可以这样做:

struct foo { int b:1; } myFoo;

printf("%c", myFoo.b ? '1' : '0');
于 2008-12-08T16:01:48.890 回答
6

相关问题:您如何设置、清除和切换单个位?是对 c 和 c++ 中的单位访问的扩展讨论。

于 2008-12-08T16:17:42.150 回答
3

要打印 n 的第 m 位(m 来自 1..16 或 32):

void print_bit(n, m)
{
    printf("%d", n & (1 << (m - 1)));
}

- 1如果您的位计数器从 0 开始,请删除该位。

于 2008-12-08T16:00:29.033 回答
1

您可以使用“联合”:

union bitshow {
    unsigned bit1:1;
    int i;
};

int main() {
    union bitshow bit;
    cin >> bit.i;
    cout << bit.bit1;
    return 0;
}
于 2011-07-11T11:38:11.783 回答
1

C++ 的答案比 C89 的答案更容易,使用本机 bool 类型:

bool b = true;
std::cout << b;

C99 非常相似:

_Bool b = 1;
printf("%d", b);
于 2008-12-09T10:10:16.790 回答