Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
%binary%
 Аватар для %binary%
52 / 11 / 1
Регистрация: 04.02.2011
Сообщений: 126
04.06.2011, 22:53     Как определить двоичный код символа. #1
Как определить двоичный код символа? Нашёл тему и исходный код программы, но мне нужно понять алгоритм работы, т.к. я начинающий, то кое чего не догоняю, кто может с комментариями объяснить?
Преобразование текст -> двоичный код -> текст
И что за "stdafx.h"? Я так понял, что это заголовочный файл, но в стандартных библиотеках его нет, и компилятор на него ругается, а без него всё работает.0_o
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 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;
}
dihlofos
Бродяга
 Аватар для dihlofos
302 / 256 / 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 в результат.

Если я в чём-то ошибся или что-то усложнил, буду рад совету знающих людей))
%binary%
 Аватар для %binary%
52 / 11 / 1
Регистрация: 04.02.2011
Сообщений: 126
05.06.2011, 11:10  [ТС]     Как определить двоичный код символа. #4
Спасибо всем за объяснения, просто заниматься стал этим совсем недавно, где-то три месяца, а информатика в школе первый год, но интерес к компьютеру и программированию огромный)
Yandex
Объявления
05.06.2011, 11:10     Как определить двоичный код символа.
Ответ Создать тему
Опции темы

Текущее время: 23:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru