Перевод десятичного числа в двоичное число с помощью метода two's complement
Пишу простенькую программу с помощью метода two's complement, получается своеобразная ошибка.
Так вот, при использовании "point++", в середине двоичного числа(как раз там, где должен быть пробел) появляется число 824 (при вводе 148 получается число 10082410100 ). При комментировании "point++" ошибки не возникает, но отсутствует пробел. Ожидал увидеть 10010100, а не 10082410100.
Заранее спасибо за помощь. Это мой первый вопрос, если возможно, укажите на ошибки в описании проблемы.
Фрагмент кода:
int main()
{
std::cout << "Hello. Enter your number:";
int x, point{1};
std::cin >> x;
for (int i = 128; i >= 1; )
{
if ((point != 4))
{
x >= i ? std::cout << '1' : std::cout << '0';
x >= i ? x -= i : x = x;
}
else
{
x >= i ? std::cout << ' 1' : std::cout << ' 0';
x >= i ? x -= i : x = x;
}
i /= 2;
//point++;
}
return 0;
}
Ответы (1 шт):
Потому что ' 1' воспринимается как двухбайтное число. Ну не бывает один символ (а в одинарных кавычках - значит, символ) из двух.
Да и вообще ваш код лучше переписать -
std::cout << "Hello. Enter your number:";
int x;
std::cin >> x;
for (int i = 128, point = 1; i >= 1; i /= 2)
{
if (point++ == 4) std::cout << ' ';
std::cout << (x >= i ? x-=i, 1 : 0);
}
Так и понятнее, и короче, нет? Только вот кажется мне, что с начальным значением point вы ошиблись, и оно должно быть равно 0.