Member 13293881 Ответов: 2

Хотите преобразовать базу 10 нет. В двоичный код, что не так в моем коде.. Он не работает должным образом.


/ * Привет, это была всего лишь неделя в мире программирования на Си. Я пытался построить
программа для преобразования base10 в двоичный код (только до 7 позиций).
Но я не получаю выхода.. Все кажется совершенным.
И еще одно. Я не хочу прямого решения этой проблемы. Если понадобится так я и сделаю
прочитали его в книге или в интернете. Я хочу решить эту проблему самостоятельно. Просто сказать мне
где я ошибаюсь? Алогорифмически все выглядит для меня конкретным. */
#include<iostream.h>
#include<stdio.h>
#include <conio.h>
void main()
{
int in,b[6],logs;
clrscr();
cout<<"Input a base 10 number:";
cin>>in;
for(int i=64; i>0;i=i/2)
{
if(in>=i && in<128)
{
/* I wanted to use LOG to base 2 function,
but I dont know how to.
So instead I tried this lengthy LOGS thing */
if(i==64)
logs=6;
else if(i==32)
logs=5;
else if(i==16)
logs=4;
else if(i==8)
logs=3;
else if(i==4)
logs=2;
else if(i==2)
logs=1;
else if(i==1)
logs=0;
b[logs]=1;
in=in%i;
}
else if(in<=i)
{
if(i==64)
logs=6;
else if(i==32)
logs=5;
else if(i==16)
logs=4;
else if(i==8)
logs=3;
else if(i==4)
logs=2;
else if(i==2)
logs=1;
else if(i==1)
logs=0;
b[logs]=0;
}
}
cout<<endl;
for(int z=0; z<=6;z=z++)
{
printf("%d",b[i]);
}
getch();
}


Что я уже пробовал:

Все возможные ошибки устраняются ..
Даже я мог бы искать код в интернете, но я не хочу копировать. Просто, Пожалуйста, скажите мне, что не так в этом коде.. Алогоритамически все выглядит прекрасно для меня.
( Мне всего неделя от роду в этом мире Си )

2 Ответов

Рейтинг:
1

OriginalGriff

Не используйте журналы: есть гораздо более простой способ.
Когда вы читаете десятичное число в целое, оно уже находится в двоичном виде - потому что именно в нем компьютеры хранят информацию. А C / C++ предоставляет пару операторов, которые позволяют вам напрямую обращаться к этому двоичному значению и манипулировать им: AND' &', Shift left '>> ' и Shift right '<<'
Если вы настроите цикл для запуска для каждого бита - в вашем случае простой цикл for от 0 до 6 будет охватывать все 7 битов - и использовать и для извлечения верхнего бита:

bit = value & 128;
Поскольку 128 имеет только один битный набор (в седьмой битной позиции его двоичное значение равно 1000000), и его сопоставление с вашим значением очищает все остальные биты.
Затем вы можете сдвинуть биты в вашем значении, готовые к следующему циклу, с помощью shift left:
value = value << 1;
Если бит равен 0, то таким же был и верхний бит значения, если он равен 128, то этот верхний бит был единицей. Так что печать становится простой:
printf("%c", bit == 128 ? '1' : '0');

Или
cout << bit == 128 ? '1' : '0';


Рейтинг:
1

Patrice T

Есть простой способ:
У вас есть ценность N основание 10, преобразовать в основание 2.
N1 база 10 будет ABCDEFGH, цифры в базе 2.
Цифра единиц измерения H = N1 по модулю 2 и N2 = N1 / 2 (целочисленное деление).
N2 база 10 будет ABCDEFG, цифры в базе 2.
Цифра единиц измерения G = N2 по модулю 2 и N3 = N2 / 2 (целочисленное деление).
N3 база 10 будет ABCDEF, цифры в базе 2.
Это рекурсивное решение.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]
Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.