0 / 0 / 1
Регистрация: 16.10.2014
Сообщений: 72
|
|
1 | |
Как использовать символьный тип данных с типом int?02.11.2014, 05:26. Показов 1111. Ответов 8
Метки нет (Все метки)
0
|
02.11.2014, 05:26 | |
Ответы с готовыми решениями:
8
Перечисляемый тип данных.Символьный тип. Как создать функцию, которая определит с каким типом данных ей работать и подстроиться под этот тип? Символьный тип данных Символьный тип данных |
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205
|
|
02.11.2014, 05:38 | 2 |
А несколько конкретней вопрос сформулировать можно?
0
|
0 / 0 / 1
Регистрация: 16.10.2014
Сообщений: 72
|
|
02.11.2014, 06:24 [ТС] | 3 |
Что такое символьный тип данных? Как его использовать и какова его связь с типом int?
0
|
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205
|
|
02.11.2014, 07:08 | 4 |
С символьным типом данных можно работать как с числами, да и представляет он здесь ни что иное как однобайтовое число (-128 - 127 в знаковом виде и 0 - 255 в беззнаковом)
В качестве примера: 'a'+1 = 'b', 'h'-'a'+'A'='H'.
0
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
|
|
02.11.2014, 08:56 | 5 |
В языках С и С++ нет никакого "символьного типа" как такового. Для представления символов используется тип 'char', который является обыкновенным целочисленным типом, таким же как и 'short', 'int' и т.п. Поэтому никаких из ряда вон выходящих особенностей при использовании с 'int' у этого типа нет - просто бери и используй.
Особенностями типов группы 'char' является то, что тип 'char' может быть как знаковым, так и беззнаковым (определяется реализацией). При этом 'char', 'signed char' и 'unsigned char' всегда являются тремя разными типами, т.е. с точки зрения языковой типизации тип 'char' не является синонимом типа 'signed char' даже если тип 'char' является знаковым.
0
|
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205
|
|
02.11.2014, 09:00 | 6 |
Так, а можно, пожалуйста, здесь немножко поподробней? По факту, при работе с символами (на том довольно низком уровне, с которым мне доводилось сталкиваться) разницы не было никакой, одно можно было заменить другим и наоборот. Где кроется подвох?
0
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
|
|||||||||||
02.11.2014, 09:06 | 7 | ||||||||||
"Подвоха" тут никакого нет. Если тип 'char' является знаковым, то по физическому представлению он точно совпадает с типом 'signed char'. Это гарантируется языком.
Но тем не на уровне языка это все равно будут два разных типа. Например, вот такой код
Если же преобразовать указатель 'char *' к типу 'signed char *' при помощи явного каста, то далее все будет работать правильно, ибо, как я уже сказал выше, язык гарантирует 100% совместимость физических представлений.
0
|
10 / 10 / 7
Регистрация: 03.02.2014
Сообщений: 205
|
|
02.11.2014, 09:13 | 8 |
Раз совместимость представлений гарантирована языком, то почему не реализовано автоматическое приведение signed char к просто char? Тем более, что это уже сделано для других целочисленных типов, как вы уже и сказали. Тут есть какой-то смысл или это просто пробел, на который все забили?
0
|
Вездепух
11691 / 6370 / 1723
Регистрация: 18.10.2014
Сообщений: 16,052
|
|
02.11.2014, 09:23 | 9 |
Неявное преобразование 'signed char' к 'char' разумеется есть, как и для любых целочисленных типов. Но для данного примера нужно приведение 'signed char *' к 'char *'. А это совсем другая история. Как я сказал ранее, тип 'char' может быть знаковым или беззнаковым. Именно поэтому на уровне языка его держат особняком от 'signed char' и 'unsigned char'.
Нет, нет, нет, для других целочисленных типов не делается никакого "приведения". Для других целочисленных типов 'signed' не создает нового типа вообще. Например 'int' и 'signed int' - это один и тот же тип. Поэтому указатель 'int *' и указатель 'signed int *' - это тоже один и тот же тип. Никакого "приведения" между ними нет и не нужно.
1
|
02.11.2014, 09:23 | |
02.11.2014, 09:23 | |
Помогаю со студенческими работами здесь
9
символьный тип данных символьный и строковый тип данных Реализовать выведение данных с типом float, вместо int Символьный тип данных и русские символы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |