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

Двоичный код символа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 96, средняя оценка - 4.81
smertnik
1 / 1 / 0
Регистрация: 06.08.2008
Сообщений: 55
06.08.2008, 02:03     Двоичный код символа #1
мне нужно из символа, после считывания из файла получить его двоичный код!!! подскажите плиз как это сделать!!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2008, 02:03     Двоичный код символа
Посмотрите здесь:

C++ Двоичный код числа
C++ Двоичный код
Преобразование в двоичный код С. C++
двоичный код C++
C++ Как определить двоичный код символа.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2218 / 733 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
06.08.2008, 05:41     Двоичный код символа #2
Символ - это и есть его двоичный код.Фактически. То,что его показывают символом- интерпритация этого кода.
Если хочешь вывести его десятичное представление на экран - делай так.
C++
1
printf("%d",(int)c );
Добавлено через 9 минут
Если хочешь показать его в двоичном виде,то задача сводится к переводу из десятичной системы в двоичную. Можно так:
C++
1
2
3
4
5
int k = 128;//k= 10000000b
while(k>0) { //
    printf("%d", bool(c&k) ); // печатаем нужный разряд.
    k=k>>1;//сдвигаем k поразрядно вправо на 1.Что есть деление на 2
};
smertnik
1 / 1 / 0
Регистрация: 06.08.2008
Сообщений: 55
06.08.2008, 05:41  [ТС]     Двоичный код символа #3
там в с можно вбить только числа, а мне нужно символы и мне не нужно выводить нолики и единички на экран!!! мне они нужны для дальнейшей обработки!!! тоесть нужно забить последовательно в символьный массив!!!
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2218 / 733 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
06.08.2008, 05:48     Двоичный код символа #4
В моем коде написано,как получить доступ к нужному разряду. Дальше хоть печатай,хоть обрабатывай...
smertnik
1 / 1 / 0
Регистрация: 06.08.2008
Сообщений: 55
06.08.2008, 06:00  [ТС]     Двоичный код символа #5
спасибки!!!
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
16.05.2010, 23:47     Двоичный код символа #6
а что в данной ситуации представляет переменная c?

Цитата Сообщение от XuTPbIu_MuHTAu Посмотреть сообщение
bool(c&k)
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2218 / 733 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
16.05.2010, 23:50     Двоичный код символа #7
IchMors, то,что печатаем. Исходный символ
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
17.05.2010, 00:00     Двоичный код символа #8
ок)) спасибо, разобрался

только вывод имеет немного перевернутый вид (слева на право) и работает только при начальном значении "с=1".
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2218 / 733 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
17.05.2010, 00:09     Двоичный код символа #9
Цитата Сообщение от IchMors Посмотреть сообщение
(слева на право)

Я всегда слева направо пишу. Привычка,так сказать..

Цитата Сообщение от IchMors Посмотреть сообщение
и работает только при начальном значении "с=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 <stdio.h>
 
 
 
void print_binary(char c) { 
    int k = 128;
 
    printf("%d ",(int)c);
 
 
    while(k>0) { //
 
        printf("%d", bool(c&k) ); // ГЇГҐГ·Г*ГІГ*ГҐГ¬ Г*ГіГ¦Г*ûé Г°Г*çðÿä.
 
        k=k>>1;//ñäâèãГ*ГҐГ¬ k ïîðГ*çðÿäГ*Г® ГўГЇГ°Г*ГўГ® Г*Г* 1.Г—ГІГ® ГҐГ±ГІГј äåëåГ*ГЁГҐ Г*Г* 2
 
    };
 
    printf("\n");
 
};
int main () { 
    
    for(char c = 0; c < 127;c++ ) 
        print_binary(c);
};
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
17.05.2010, 00:23     Двоичный код символа #10
что-то, честно говоря, я ума не приложу. Что ж тут правильного? Вы не заметили что истинное значение оно принимает только на наборе "1". Вот мой пример вашего выполнения:
Миниатюры
Двоичный код символа  
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2218 / 733 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
17.05.2010, 00:28     Двоичный код символа #11
IchMors, младшие разряды справа,старшие - слева. Вы же не говорите, что 10 - это на самом деле единица, 100 - тоже единица,а вот 001 - сто?

Добавлено через 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
30
#include <stdio.h>
 
 
 
void print_binary(char c) { 
    int k = 128;
 
    printf("%d ",(int)c);
 
    while(!bool(c&k) && k ) 
        k>>=1;
 
    if(k==0) 
        printf("0");
    while(k>0) { //
 
        printf("%d", bool(c&k) ); // ГЇГҐГ·Г*ГІГ*ГҐГ¬ Г*ГіГ¦Г*ûé Г°Г*çðÿä.
 
        k=k>>1;//ñäâèãГ*ГҐГ¬ k ïîðГ*çðÿäГ*Г® ГўГЇГ°Г*ГўГ® Г*Г* 1.Г—ГІГ® ГҐГ±ГІГј äåëåГ*ГЁГҐ Г*Г* 2
 
    };
 
    printf("\n");
 
};
int main () { 
    
    for(char c = 0; c < 127;c++ ) 
        print_binary(c);
};
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
17.05.2010, 00:48     Двоичный код символа #12
IchMors, младшие разряды справа,старшие - слева. Вы же не говорите, что 10 - это на самом деле единица, 100 - тоже единица,а вот 001 - сто?
конечно же нет, но это называется с права на лево.

Вот теперь давайте проясним следующее: программа выводит на экран двоичное значение "с", а переменная "к" служит только для установления длины печатаемого числа? Если так, то меня просто смутила эта строчка:
int k = 128;//k= 10000000b
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2218 / 733 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
17.05.2010, 13:28     Двоичный код символа #13
IchMors, не, k - это маска для побитовой операции "и". Там в комментах её двоичное представление,в цикле эта единичка смещается вправо по байту. Она не для установления длины,а для обработки каждого бита байта.
IchMors
96 / 92 / 4
Регистрация: 16.05.2010
Сообщений: 307
08.06.2010, 03:52     Двоичный код символа #14
Еще один вопрос пожалуйста)
в очень уж не нравится компилятору что в функцию bool() входят переменные int. Как с этим можно бороться?
При выполнении программа напрочь вылетает
Предупреждение: warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
Пример кода:
C++
1
2
3
4
5
    while(k>0) {
        text[count++]=int(bool(c&k));
        k=k>>1;
        count++;
    }
Добавлено через 44 секунды
XuTPbIu_MuHTAu, еще один вопрос пожалуйста)
в очень уж не нравится компилятору что в функцию bool() входят переменные int. Как с этим можно бороться?
При выполнении программа напрочь вылетает
Предупреждение: warning C4800: 'int' : forcing value to bool 'true' or 'false' (performance warning)
Пример кода:
C++
1
2
3
4
5
    while(k>0) {
        text[count++]=int(bool(c&k));
        k=k>>1;
        count++;
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2015, 16:47     Двоичный код символа
Еще ссылки по теме:

перевод десятичного вещественного в машинный код(двоичный код) C++
двоичный код C++
перевод в двоичный код C++

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

Или воспользуйтесь поиском по форуму:
SYPER GENIY
0 / 0 / 0
Регистрация: 13.05.2015
Сообщений: 10
Записей в блоге: 3
20.05.2015, 16:47     Двоичный код символа #15
ДОБРЫЙ ДЕНЬ !!!
Я долго работал над созданием двух програм. И вот результат, две програмы 1)перестраевает цыфры десятичной системы в двоичную 2)перестраевает двоичную в десятичную.
1)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var a : integer;
 
function DEC_BIN(x:longint):string;
const digits:array [0..1] of char = ('0','1');
var res:string; d:0..1;
begin
   res:='';
   while (x<>0) do begin
      d:=x mod 2; res:=digits[d]+res;
      x:=x div 2;
   end;
   DEC_BIN:=res;
end;
 
begin
  readln( a );
  writeln( DEC_BIN(a) );
end.
2)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var a : string;
 
function BIN_DEC(x:string):longint;
const digits:array [0..1] of char = ('0','1');
var res,ves:longint; i,j:byte;
begin
   res:=0; ves:=1;
   for i:=length(x) downto 1 do begin
      j:=0;
      while (digits[j]<>x[i]) do inc(j);
      res:=res+ves*j;
      ves:=ves*2;
   end;
   BIN_DEC:=res;
end;
 
begin
  readln( a );
  writeln( BIN_DEC(a) );
end.
Всем приятного програмирования
Yandex
Объявления
20.05.2015, 16:47     Двоичный код символа
Ответ Создать тему
Опции темы

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