andrey
andrey

Reputation:

How do I print one bit?

Please tell me how do I print a bit, like printf("%d",bit);.

Upvotes: 7

Views: 19952

Answers (6)

Keltia
Keltia

Reputation: 14743

To print the m-th bit (m from 1..16 or 32) of n:

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

Remove the - 1 bit if your bit counter starts at 0.

Upvotes: 3

Sajjad Mohammadadeh
Sajjad Mohammadadeh

Reputation: 21

You can use "union":

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

int main() {
    union bitshow bit;
    cin >> bit.i;
    cout << bit.bit1;
    return 0;
}

Upvotes: 1

plinth
plinth

Reputation: 49189

If you need to generalize more than Herms, you could do this:

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

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

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

The printf is equivalent to Herms answer as is.

If you're talking about bitfield in C, you can do this:

struct foo { int b:1; } myFoo;

printf("%c", myFoo.b ? '1' : '0');

Upvotes: 10

MSalters
MSalters

Reputation: 179917

The C++ answer is easier than the C89 one, with the native bool type:

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

C99 is quite similar:

_Bool b = 1;
printf("%d", b);

Upvotes: 1

Related question: How do you set, clear, and toggle a single bit? is an extended discussion of single-bit access in c and c++.

Upvotes: 6

Herms
Herms

Reputation: 38808

If bit is just an int that contains the value you want in the least significant bit, then:

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

should do it. The & is doing a binary-AND with a number with only the first significant bit set, so you're removing all the rest of the bits in the integer.

Upvotes: 20

Related Questions