I want to print an integer number in binary mode using following function:
#include <stdio.h>
void print_binary(int n)
{
int i = 0;
for (i = sizeof(n)*8 - 1; i >= 0; i--)
{
printf("%d", ((n & ((1 << (i + 1)) - 1)) >> i) ? 1 : 0);
}
}
main.c
int main(int argc, char *argv[])
{
printf("%d in binary:\n", atoi(argv[1]));
print_binary(atoi(argv[1]));
printf("\n");
printf("%d in hex: 0x%x\n", atoi(argv[1]), atoi(argv[1]));
return 0;
}
if I passed -1 into it, the output is incorrect, what is wrong?
-1 in binary:
01111111111111111111111111111111
-1 in hex: 0xffffffff
What causes the most significant bit to become 0?
This expression
1 << (i + 1)is undefined behavior wheni + 1 == 32(i.e.,>= CHAR_BIT * sizeof (int)in your platform.