次の関数を使用して、バイナリモードで整数を出力したい:
#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;
}
-1を渡した場合、出力が正しくありません。何が問題になっていますか?
-1 in binary:
01111111111111111111111111111111
-1 in hex: 0xffffffff
最上位ビットが0になる原因は何ですか?