Найти тему
Junior Coder

ASCII и бинарные операции

  • Таблицу символов Американского стандартного кода для обмена информацией ASCII(American Standard Code for Information Interchange) или "аскей" по-русски, должен знать каждый программист, как математик должен знать таблицу умножения. Поэтому, я уверен, она хранится у каждого разработчика в отдельном файле. В одном из предыдущих постов я рассказывал, как можно программно выковырять эту таблицу из недр компьютера, но лучше скачать ее из интернета - там она представлена со всеми расшифровками управляющих символов. Стандартная таблица содержит 128(0-127)символов, а расширенная 256(0-255)символов. Каждый символ занимает один байт информации. Первые тридцать два являются управляющими, и выполняют какое-то действие появляясь в командной строке, например:

cout << char(7);

выдаст звуковой сигнал, а:

cout << char(8);

вернет курсор на одну позицию назад. Перевод каретки влево и перевод строки (0xD 0xA) в Hex-редакторе появляются в операционной системе Windows вместе:

и означают начало новой строки, в Linux используется только 0xA (спец. LF - Line Feed). В С и С++ есть собственные специальные символы:

\a - сигнал

\b - возврат курсора на шаг

\n - новая строка

\r - возврат каретки

\t - табуляция

\\ - косая черта

\? - знак вопроса

\" - кавычка

\' - одинарная кавычка

например если набрать:

wcout << "\tЭто верхняя строка \nЭто нижняя строка";

то вывод будет:

Это верхняя строка

Это нижняя строка

В С++ есть числовые и строковые переменные, int 0 и char 0 - это не одно и тоже(int от слова integer -числовая переменная, а char от слова character -строковая), в таблице они расположены в разных местах:

-2

Чтобы присвоить числовой переменной строковой параметр, можно выполнить несложную бинарную процедуру:

int i = 5, x;

char s;//объявляем переменные

s = i + 0x30;

x = i + 0x30;

выводим результат:

cout << "i = " << i << endl;

cout << "s = " << s << endl;

cout << "x = " << x << endl;

и получаем:

i = 5

s = 5 \\это уже строковой параметр

x = 53

то есть мы переместили значение i в таблице на 0х30 и присвоили его строковой переменной. Обратите внимание на числовую переменную х, значение цифры 5 в таблице 53, мы работали в бинарном измерении где 0х30 соответсвует десятичному 48, а это 00110000 в бинарном виде, прибавляем пять 00000101 и получаем 00110101 что соответсвует 53. Как вообще выполняются бинарные операции, возьмем к примеру 3+1:

  00000011 -это три

+00000001 -это один

--------------------

=00000100 -четыре

все операции производятся справа налево. Если, скажем так, встречаются две единицы, то они обнуляются и единица переносится влево, если там находится единица, то она так же обнуляется и переносится еще раз влево.

Если набрать в компиляторе:

cout << char(77);

то на экране командной строки отразится английская буква M.

И напоследок небольшая, прикольная программка:

(знак решетки)include <iostream>

(знак решетки)include <windows.h>

using namespace std;

main()

{

setlocale(LC_ALL,".OCP");

char s[]="Всем пока!";

for(int i = 0; i < sizeof(s); i++)

{

wcout << s[i];

Sleep(200);

}

return 0;

}

#C++ #ASCII #программирование