Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
%binary%
52 / 11 / 1
Регистрация: 04.02.2011
Сообщений: 126
#1

Как определить двоичный код символа. - C++

04.06.2011, 22:53. Просмотров 2922. Ответов 3
Метки нет (Все метки)

Как определить двоичный код символа? Нашёл тему и исходный код программы, но мне нужно понять алгоритм работы, т.к. я начинающий, то кое чего не догоняю, кто может с комментариями объяснить?
Преобразование текст -> двоичный код -> текст
И что за "stdafx.h"? Я так понял, что это заголовочный файл, но в стандартных библиотеках его нет, и компилятор на него ругается, а без него всё работает.0_o
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2011, 22:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как определить двоичный код символа. (C++):

Двоичный код символа - C++
мне нужно из символа, после считывания из файла получить его двоичный код!!! подскажите плиз как это сделать!!!

Как определить код символа ? - C++
Ввести любой латинский строчный символ с клавиатуры. Вывести его порядковый и соответствующий прописной символ.

Определить двоичный код заданной десятичной цифры. - C++
Определить двоичный код заданной десятичной цифры. Надо реализовать в С++

Как узнать двоичный код файла? - C++
...То есть разложить на единицы и нолики.

как исправить ошибку? (программа должна перевести двоичный код в десятичный) - C++
#include <iostream.h> #include <string.h> int atoi(char *s) { int chislo = 0; int razryad = 1; int len = strlen(s); ...

перевод десятичного вещественного в машинный код(двоичный код) - C++
пожалуйста , подскажите пожалуйста код C++ ,для перевода вещественного числа в машиное (двоичное представление,32 бит). Без использования...

3
diagon
Higher
1930 / 1196 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
05.06.2011, 07:43 #2
stdafx.h-заголовочный файл MS Visual Studio, остальным компиляторам не нужен
Почитайте по алгоритм перевода числа из десятичной в двоичную систему. Если вкратце-пока число больше или равно основанию системы(2 в данном случае), делим его на 2, и запоминаем остатки от деления. Затем берем оставшуюся цифру и собираем остатки с конца, получится двоичное число.
Моя реализация:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
char * bin(int n){
    const int size=100; //максимальная длина числа
    int * b=new int[size],i=0,j; //объявляем переменные и заодно выделяем память под массив b
    for (;n>1;n/=2) //пока число больше 1 
        b[i++]=n%2; //заносим в массив остатки от деления это числа на 2, и делим само число
    b[i++]=n;//заносим в конец массива оставшуюся цифру(впрочем, в двоичной системе она всегда будет равна 1)
    char s[size];
    for (j=0;i;)
        s[j++]=b[--i]+48;  //заносим в строку перевернутый массив
    s[j]=0; //ставим символ конца строки
    delete[] b;  //освобождаем память
    return s; 
}       
int main(){
    int a;
    std::cout << "dec: ";
    std::cin >> a;
    std::cout << "binary: " << bin(a) << std::endl;
    return 0;
}
1
dihlofos
Бродяга
303 / 257 / 17
Регистрация: 27.08.2010
Сообщений: 553
05.06.2011, 08:41 #3
Цитата Сообщение от %binary% Посмотреть сообщение
Как определить двоичный код символа?
Если символа (т.е. char, занимающего 1 байт), то как я понимаю, можно работать на битовом уровне? Вот как я бы сделал (без претензии на правильность или идеальность кода))):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
int charToBinary(unsigned char val)
{
    int binary = 0;
    
    for (int i = 7; i >= 0; --i)
    {
        binary *= 10;
        
        if (val & (1 << i))
            binary += 1;
    }
    
    return binary;
}       
    
int main()
{
    unsigned char a;
    std::cout << "enter symbol: ";
    std::cin >> a;
    std::cout << "binary: " << charToBinary(a) << '\n';
    
    return 0;
}
С поразрядными операциями у меня пока туговато, но я могу объяснить работу функции так:

1 << i - побитовый сдвиг 1 на i позиций, например: 1 << 0 = 00000001; 1 << 1 = 00000010; 1 << 2 = 00000100 итд

& - поразраядная конъюнкция - в результат заносится 1, когда оба сравниваемых бита == 1, иначе - 0, например: 11101101 & 01000001 = 01000001 (true), a 10101101 & 01000010 = 00000000 (false)

Таким образом просматриваем каждый бит val на равество его 1, и в случае успеха добавляем 1 в результат.

Если я в чём-то ошибся или что-то усложнил, буду рад совету знающих людей))
1
%binary%
52 / 11 / 1
Регистрация: 04.02.2011
Сообщений: 126
05.06.2011, 11:10  [ТС] #4
Спасибо всем за объяснения, просто заниматься стал этим совсем недавно, где-то три месяца, а информатика в школе первый год, но интерес к компьютеру и программированию огромный)
0
05.06.2011, 11:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2011, 11:10
Привет! Вот еще темы с ответами:

Как вывести код символа? - C++
Дан символ C. Как вывести его код(то есть номер в кодовой таблице)?

Как получить бинарный код символа? - C++
Я читаю txt в котором разные символы(без русских) типа такого 45h8giJDFJH Я должен прочитать их и перевести их в бинарный код из...

Вывод символа char, как код (как число) - C++
Привет. При выполнении: char ch = 'М'; cout &lt;&lt; hex &lt;&lt; uppercase &lt;&lt; (short) ch; выводится &quot;FFCC&quot;. Вопрос, как добится вывода...

Что означает двоичный поиск?Как определить позицию, где в этот массив можно вставить число x - C++
помогите решить эту задачу &quot;Элементы массива не убывают. Двоичным поиском определить позицию, где в этот массив можно вставить данное число...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru