Для ясности: я знаю, что есть решения для реального кода, которые дают результат, который я ищу, но меня это не беспокоит. Меня беспокоит, почему код, который я уже написал , не дает желаемого результата.
Я написал эту функцию:
string ToBinary(int val, int space)
{
string str = "";
int tmp = int(val), num = 0;
for (int i = INT_SIZE; i > 0; i--)
{
str = char((int(tmp & 1) + '0')) + str;
tmp >>= 1;
}
for (int i = 1; i < str.size(); i++)
{
if (i % space == 0)
{
str.insert((i-num)," "); // num -starting at 0- is the number of spaces in the string
num++;
}
}
return str;
}
Итак, эта функция Предполагается, что он принимает целое число и преобразует его в двоичную строку, затем он берет эту строку и выполняет итерацию по каждому di git, вставляя пробел в каждый интервал space
. (в данном случае это 4) Я называю это так: printf("%s", ToBinary(0,4).c_str());
(0 - первый элемент массива, содержащего целые числа).
Первый элемент - это номер 0, поэтому на выходе должен быть 0000 0000 0000 0000 0000 0000 0000 0000
, но вместо этого 0000 00 00 00 00 00 00 00 00 00 0000000000
, и я не уверен, почему?
Изменить: я считаю, что исправил код следующим образом:
string ToBinary(int val, int space)
{
string str = "";
int tmp = int(val);
for (int i = INT_SIZE; i > 0; i--)
{
str = char((int(tmp & 1) + '0')) + str;
tmp >>= 1;
if (i % space == 0)
{
str.insert(i-(i-1)," ");
}
}
return str;
}
Я покончил с второй для l oop полностью, и вместо этого решил изменить str
внутри первого l oop. Я не совсем уверен, почему это дает желаемый результат, хотя в отличие от первого экземпляра опубликованного кода, поэтому, если кто-то знает, мне бы хотелось получить ответ!