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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.85
RiG1
28 / 28 / 0
Регистрация: 12.03.2011
Сообщений: 465
#1

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

11.05.2011, 01:45. Просмотров 3276. Ответов 3
Метки нет (Все метки)

Вот надыбал такой код для сабжа
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 и как этот цикл вообще работает можете объяснить?
И ещё один вопрос. Если я это прикручу к форме, то корректно ли будут обрабатываться русские символы?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2011, 01:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразование Букв в двоичный код (C++):

Преобразование в двоичный код С. - C++
Задание следующее: Написать программу, которая получает случайное целое типа int,выводит егодвоичное представление на экран, выполняет...

Преобразование текст -> двоичный код -> текст - C++
// praci5.cpp: определяет точку входа для консольного приложения. // #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; ...

Преобразование чисел в двоичный вид - C++
Задача.С клавиатуры вводится целое число. Необходимо вывести его двоичное представление на экран. Отрицательные числа выводятся в...

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

двоичный код - C++
есть число в десятичной системе ( напр. 25 ) нужно перевести его в двоичную систему ( 11001 ) затем переставить все 1 вперед а 0 назад...

Двоичный код - C++
Подскажите пожалуйста как возможно работать на С++ с двоичным кодом (b). И возможно ли это в вообще в С и нужно использовать только...

3
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
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";
1
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.05.2011, 04:41 #3
Цитата Сообщение от RiG1 Посмотреть сообщение
но вот что такое 1<<power
умножение на 2 в степени power
1
CEBEP
11.05.2011, 04:43     Преобразование Букв в двоичный код
  #4

Не по теме:

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

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2011, 04:43
Привет! Вот еще темы с ответами:

двоичный код - C++
В общем задание такое: вводим число, присвоиваем переменной, на эту перемменную указатель, и нужно вытащить побитово значение этой...

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

Двоичный код Хоффмана - C++
Помогите написать программу на С++ по заданному тексту задания(задание на фото)?

Двоичный код числа - C++
Вывести на экран двоичный код однобайтового числа типа char. Теперь надо чтобы программа работала только с беззнаковыми данными....


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

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

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