Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
0 / 0 / 1
Регистрация: 02.06.2016
Сообщений: 48

Символ или число

20.07.2016, 18:24. Показов 1826. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. В голове возник такой странный вопрос, а как компьютер понимает , где символ , а где число.

Например латинский символ 'a' имеет код 97, в двоичном это : 1100001, но так же есть и число 97, двоичное представление такое же, так вот повторю вопрос, как компьютер понимает, где число а где символ. Возможно допустил какую-то грубую ошибку, исправьте если что!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.07.2016, 18:24
Ответы с готовыми решениями:

Как можно вывести определенный символ и/или число из введенного пользователем текста?
Напишите пожалуйста все возможные способы)

Найти символ число по символу, введенному с клавиатуры, и после него добавить новый символ
Найти символ число по символу, введенному с клавиатуры, и после него добавить новый символ

В списке найти символ число по заданному символу, и после него добавить новый символ
Найти символ число по символу, введенному с клавиатуры, и после него добавить новый символ Помогите пожалуйста)

23
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,237
20.07.2016, 18:29
Никак. Если переменная встречается в арифметическом выражении, то это число.
Если в строковых операциях, то символ.
1
 Аватар для lawr
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
20.07.2016, 19:01
zss, а если к примеру операция вывода в поток?
C++
1
2
3
int a=97;
char b=97;
std::cout<<a<<' '<<b;
0
Заблокирован
20.07.2016, 19:05
Комптьютер никак не понимает. Для него все число, все в двоичном представлении. Число, или символ - это представление человека, а не компьютера.
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,237
20.07.2016, 19:17
C++
1
2
cout<<(int)b; // вывод кода символа
cout<<b;// вывод самого символа
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,984
Записей в блоге: 32
21.07.2016, 00:21
Цитата Сообщение от RomanFlash Посмотреть сообщение
Возможно допустил какую-то грубую ошибку
Начали сразу изучать плюсы без базы Си и ассемблера, как советуют адепты труЪ ООП.
2
10 / 10 / 9
Регистрация: 30.03.2016
Сообщений: 163
21.07.2016, 00:35
Компайлер(C++ к примеру) переводит код на код Асеблер, тот в свою очередь очень приближен на машинный коду (так сказать что то между) Асемблер уже переводит свой код на машинный, этот код и понимает компютер. Как это работает на машинном уровне уже совсем другая история.
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
21.07.2016, 03:16
Цитата Сообщение от RomanFlash Посмотреть сообщение
Здравствуйте. В голове возник такой странный вопрос, а как компьютер понимает , где символ , а где число.
Например латинский символ 'a' имеет код 97, в двоичном это : 1100001, но так же есть и число 97, двоичное представление такое же, так вот повторю вопрос, как компьютер понимает, где число а где символ. Возможно допустил какую-то грубую ошибку, исправьте если что!
Символ имеет тип char. Это тоже числовой тип, только при выводе на печать он выводит не свое значение, а символ ему соответствующий.
2
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
21.07.2016, 11:32
Цитата Сообщение от Mr.X Посмотреть сообщение
только при выводе на печать он выводит не свое значение, а символ ему соответствующий
P.S. И это вовсе не заслуга типа, а лишь функции его выводящей.
1
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
21.07.2016, 12:12
Цитата Сообщение от SatanaXIII Посмотреть сообщение
И это вовсе не заслуга типа, а лишь функции его выводящей.
А куда ж она денется, она ж знает, что он для представления символов предназначен.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
21.07.2016, 13:30
Цитата Сообщение от RomanFlash Посмотреть сообщение
как компьютер понимает, где число а где символ.
Внутренне всё что читается и пишется это последовательности бит собранных в байты. За интерпретацию отвечает тип. Тип это базовое понятие С++. Он подразумевает размер, способ интерпретации (формат), допустимые операции, диапазон возможных значений.
То есть, компилятор просто не пропустит операцию которая для типа не определена (если не возможно приведение к подходящему типу). Так не получится сложить два массива, например. Но если есть приведение, то оно будет действовать. Существует например пришедшее из глубины веков приведение char к целым типам в арифметических операциях(). Чары данного приведения становятся целыми методом расширительного преобразования:
C++
1
2
char a='a';
int b =1+a;// преобразует a к [S]97[/S] int(a)
То есть, вместо а подставляется временная переменная - результат преобразования.
1
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
21.07.2016, 13:38
Цитата Сообщение от IGPIGP Посмотреть сообщение
Существует например пришедшее из глубины веков приведение char к целым типам в арифметических операциях
Так char - это уже целочисленный тип.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
21.07.2016, 18:40
Цитата Сообщение от Somebody Посмотреть сообщение
Так char - это уже целочисленный тип.
Как! Уже? Та не. Он и раньше был
Цитата Сообщение от Somebody Посмотреть сообщение
целочисленный тип
Он просто не целый. Он char и он целочисленный. Часто можно слышать сентенции о том, что отличия char от других целых целочисленных - целых (short на системах, где размер совпадает) определяется "такой" перегрузкой операторов сдвига, библиотечными функциями ожидающими char * указывающих на цепочку с терминатором и пр. тяжкими наследиями прошлого, вроде инициализации указателей и массивов литералами. Последнее реализуется в компиляторе, кстати.
Но ведь в С++ почти всё реализовано в библиотеках. А тип и определяется тем как его интерпретируют и какие операции с ним допустимы. Нет char это не short. Char это short поб'ери char и только char.
0
 Аватар для lawr
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
21.07.2016, 21:42
а теперь для совершеннейших дебилов, которые не рубят в ассемблерах и прочей низкоуровеньщине пожалуйста. вот к примеру объявление с инициализацией:
C++
1
int a=0;
понимаю, выделяется область памяти, в которую прописывается это значение. интересует как увязывается имя переменной с адресом в памяти и тип со значением, которое в этой памяти хранится.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
21.07.2016, 22:19
Цитата Сообщение от lawr Посмотреть сообщение
а теперь для совершеннейших дебилов, которые не рубят в ассемблерах и прочей низкоуровеньщине пожалуйста
Это им зачем?
Цитата Сообщение от lawr Посмотреть сообщение
понимаю, выделяется область памяти, в которую прописывается это значение
Сначала компилятор где-то регистрирует новую переменную типа int , выделяет память и сохраняет адрес. Теперь, везде где встретится, a в области видимости объявления, будет обращение по адресу в контексте заданном кодом. Например, в cout<<a; в консоль будут выведены символы десятичного (если не установлено другого режима) представления значения, записанного по адресу, связанному с а, в данных компилятора. Это может быть таблица соответствия. А если встретится cout<<char(a);, то выведется знак текущей кодовой таблицы с номером соответствующим a. Поскольку преобразование сужающее, то более менее ожидаемо оно будет, если значение a лежит в пределах char. В месте вызова оператора, код будет соответствовать вызову с символом, а не с целым и это разрешится на стадии компиляции, как я понимаю. А в первом случае будет вызвана перегрузка оператора << для int с тем же аргументом a. Тупость упрямство некоторых знатоков низкоуровщины, иногда состоит в том, что они не согласны с тем, что информация о типе используется на стадии компиляции. При статической типизации иначе и не бывает. А в бинарнике действительно только нули и единицы. Там если и есть типы, то только те что их читают.
Пишу как человек, не ведающий низкоуровщины и реализации данных вещей на X86
2
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
21.07.2016, 22:24
Цитата Сообщение от IGPIGP Посмотреть сообщение
Сначала компилятор где-то регистрирует новую переменную типа int , выделяет память и сохраняет адрес.
Как компилятор может это сделать, если выделение памяти происходит только в момент выполнения программы ?
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
21.07.2016, 22:33
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Как компилятор может это сделать, если выделение памяти происходит только в момент выполнения программы ?
rikimaru2013, компилятор это не только препроцессор, трассировщик и редактор связей. Компилятор это исполняющая среда C++ слышали о такой?
А память в коде выделяется без значений адресов. Если значение известно на стадии компиляции то оно попадет в бинари inline. А память во время выполнения выделяет операционная система по запросу программы. И там нет не только int или char там нет даже C++.
1
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
22.07.2016, 00:53
Цитата Сообщение от IGPIGP Посмотреть сообщение
Компилятор это исполняющая среда C++ слышали о такой?
Что это такое?
0
 Аватар для lawr
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
22.07.2016, 02:11
IGPIGP,
Это им зачем?
ну просто есть такая порода людей которым интересно все, что непонятно. в общем, насколько я понял, тип данных определяется на этапе компиляции а сами данные пишутся в память на этапе исполнения. тогда не понимаю, как происходит явное приведение типов- оно ведь должно происходить во время исполнения насколько я понимаю...
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9005 / 4706 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
22.07.2016, 09:34
lawr, прежде всего спасибо, что не стали писать о виртуальном и физическом адресном пространстве, различиях в выделении памяти для значения/адреса в коде и в процессе выполнения, о коде обслуживания вызова и пр.
Я уж думал - сейчас начнётся. rikimaru2013, я попросил воздержаться потому как тут есть кому потереть ладоши и без него. Кстати о них:
Цитата Сообщение от lawr Посмотреть сообщение
ну просто есть такая порода людей которым интересно все, что непонятно.
Это не просто. Есть тема и есть ТС, который несмотря на обилие источников, просит объяснить. Как же это сделать? Можно попробовать сказать так, чтобы ему было понятно, а можно подождать пока кто-то скажет и попробовать "срезать". А ведь если что-то интересно, но не в тему, - то можно же создать новую тему.
Цитата Сообщение от lawr Посмотреть сообщение
тип данных определяется на этапе компиляции а сами данные пишутся в память на этапе исполнения.
Можно так сказать. Не затрагивая класс хранения, константность выражения и пр.
Цитата Сообщение от lawr Посмотреть сообщение
как происходит явное приведение типов- оно ведь должно происходить во время исполнения насколько я понимаю...
Приведений полно. И во время исполнения происходит преобразование полиморфных родственников в иерархии. Но это приведение не настоящее, так-как наследник это расширенный родитель. Данная тема далеко от различия символа 'a' (ascii lat) и числа 97. Можно создать тему и там будет что написать.
Цитата Сообщение от ct0r Посмотреть сообщение
Что это такое?
Компилятор (его кодогенератор ) генерирует код. Код во время исполнения работает так как его создал компилятор. Существуют мнения, что поведение программы определяется компилятором и кодом. Отсюда зависимости от реализации на уровне компилятора. Причём Вы это хорошо знаете. ct0r, а давайте Вы TC расскажете о типах и типизациях?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.07.2016, 09:34
Помогаю со студенческими работами здесь

Пользователь вводит целое число n и ДВА символа. Программа выводит на экран последовательно символ №1 и символ
Пользователь вводит целое число n и ДВА символа. Программа выводит на экран последовательно символ №1 и символ №2 n-раз. ...

Ввести с клавиатуры символ (в переменную char) и определить, соответствует ли введенный символ 'Q' или 'q'
1)Ввести с клавиатуры символ (в переменную char) и определить, соответствует ли введенный символ 'Q' или 'q' (использовать логический...

Вставить символ ‘*’ в середину стека, если число элементов четное, или после среднего элемента, если нечетное
Вставить символ ‘*’ в середину стека, если число элементов четное, или после среднего элемента, если число элементов нечетное. не...

Определить введенный символ: число, прописная буква, строчная, знак сравнения или математический символ
Написать программу которая запрашивает ввод любого символа, а после определяет его и выводит на экран что это: число, прописная буква,...

Заменить каждый четный символ или на 'a', если символ не равен 'a' или 'b', или на 'c' в противном случае
Дана строка. Заменить каждый четный символ или на 'a', если символ не равен 'a' или 'b', или на 'c' в противном случае


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru