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

Преобразование Букв в двоичный код - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.85
RiG1
 Аватар для RiG1
28 / 28 / 0
Регистрация: 12.03.2011
Сообщений: 466
11.05.2011, 01:45     Преобразование Букв в двоичный код #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
27
28
29
30
#include <iostream>
using namespace std;
 
int main()
{
     cout<< "Vvod: ";
     char s[255];
     cin>> s ;
 
      cout<< '\n' << "Bin code:\n";
      int i,c,power;
 
     for( i=0 ; s[i]!='\0' ; i++ )
     {
          c = s[i];
          
          for( power=7 ; power+1 ; power-- )
          if( c >= (1<<power) )
          {
              c -= (1<<power); 
              cout << "1";
          }
          else
          cout << "0";
          cout << '\n';
   }
     cin.get();
     cin.get();
     return 0;
}
Не могу понять только вот этого цикла
C++
1
2
3
4
5
6
7
8
for( power=7 ; power+1 ; power-- )
          if( c >= (1<<power) )
          {
              c -= (1<<power); 
              cout << "1";
          }
          else
          cout << "0";
Понял что выводится байтовое число, но вот что такое 1<<power и как этот цикл вообще работает можете объяснить?
И ещё один вопрос. Если я это прикручу к форме, то корректно ли будут обрабатываться русские символы?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2011, 01:45     Преобразование Букв в двоичный код
Посмотрите здесь:

C++ Двоичный код символа
C++ Преобразование чисел в двоичный вид
C++ Двоичный код
Преобразование в двоичный код С. C++
двоичный код C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
11.05.2011, 04:37     Преобразование Букв в двоичный код #2
это весьма хитрожопый (да помилуют меня модераторы, но иначе не скажешь) код побитного вывода байта. итак по порядку:
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
27
28
29
for( power=7 ; power+1 ; power-- )/*цикл. примечателен тем что итератор power 
будет не увеличивается а уменьшатся пока не станет -1. как только это произойдёт
power+1 станет равно нулю и цикл завершится*/
    if( c >= (1<<power) )
/*вот это наиболее крутое из всего что есть в цикле. Происходит следующее:
берётся цифра 1 и кладётся в 8 бит, получается область памяти содержащая
00000001, далее с помощью операции << эта единица двигается влево по битам
на power. т. е. для каждой итерации цикла на 7, на 6, 5, 4, 3, 2, 1 и 0 бит. получая
таким образом числа 10000000, 01000000 ... 00000001. далее, сие число сравнивается
с исходным(тем самым, содержмиое которого автор скрипта вознамерился побитно
вывести, т. е. переменной c*/
    {
        c -= (1<<power); 
        cout << "1";
/*если эта хитрожопая единица оказалась больше нашего числа мы её из него вычитаем, и выводим 1. Так как
о дальнейшей части алгоритма говорить, в целом, нечего, разъясню произошедшее прямо
здесь. Предположим, мы ввели символ %, имеющее кодовый номер 37, соответствующий в двоичной системе числу 00100101(нули в начале не убираю для наглядности)
цикл сравнивает его сначала с 10000000, потом с 01000000, и ничего не делает
так как эти числа больше чем наше 37, далее приходит время 00100000, оно меньше.
оно вычетается, таким образом от нашего числа остаётся только 00000101, и выводится 1.
Далее, думаю, проще додуматься чем дочитать.
 
 
Короче: это не то что вам нужно. Буквы и так хранятся в двоичном коде, как правило
из 8 байт и хранятся в char (можно почитать в гугле). Если вам нужно преобразование
чисел введённых в виде строки в тип int - для того есть специальные функции.*/
    }
    else
        cout << "0";
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.05.2011, 04:41     Преобразование Букв в двоичный код #3
Цитата Сообщение от RiG1 Посмотреть сообщение
но вот что такое 1<<power
умножение на 2 в степени power
CEBEP
11.05.2011, 04:43     Преобразование Букв в двоичный код
  #4

Не по теме:

Цитата Сообщение от Maxwe11 Посмотреть сообщение
умножение на 2 в степени power
сократил то ё. мне даже стыдно стало за многословие...

Yandex
Объявления
11.05.2011, 04:43     Преобразование Букв в двоичный код
Ответ Создать тему
Опции темы

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