Проблема, с которой вы сталкиваетесь, в том, что -1 % 2 == -1
и if (-1)
- это правда. Таким образом, ваш алгоритм выдает точно такой же результат для x
и -x
.
. Один из способов исправить это - использовать unsigned int
в вашем цикле:
unsigned int num = dec;
char bin32[] = "00000000000000000000000000000000";
for (int pos = 31; pos >= 0; --pos)
{
if (num % 2)
bin32[pos] = '1';
num /= 2;
}
Другойиспользовать побитовые операторы вместо арифметики:
int dec = -5;
char bin32[] = "00000000000000000000000000000000";
for (int pos = 0; pos < 32; ++pos)
{
if (dec & (1 << pos))
bin32[31-pos] = '1';
}