0 / 0 / 0
Регистрация: 28.08.2011
Сообщений: 9
|
||||||
1 | ||||||
Разница между char и signed char06.07.2012, 18:34. Показов 27081. Ответов 22
Метки нет (Все метки)
Не понимаю в чем разница между char и signed char, ведь char по умолчанию знаковый.
Не комплилируется следующий фрагмент кода:
0
|
06.07.2012, 18:34 | |
Ответы с готовыми решениями:
22
Char unsigned char signed char длинна Кааак В чем разница между char* и char ** В чем разница между char* и char[]? Разница между char[] и char* |
320 / 270 / 128
Регистрация: 24.05.2012
Сообщений: 629
|
|
06.07.2012, 18:47 | 2 |
Точно не определено, каким именно (знаковым или беззнаковым) должен быть тип char. Так что если он требуется для вычислений и принимает значения < 0 или > 127, следует указывать явно.
Фрагмент не компилируется из-за несоответствия типов.
0
|
0 / 0 / 0
Регистрация: 28.08.2011
Сообщений: 9
|
|
06.07.2012, 18:56 [ТС] | 3 |
Диапазон значений типа char (либо [-128, 127], либо [0, 255]) зависит от аппаратной реалзации, поэтому для компилятора signed char и char не одно и тоже. Я правильно понял? Или это от компилятора зависит?
0
|
06.07.2012, 19:44 | 4 |
https://www.cyberforum.ru/blogs/18334/blog69.html
далее раздел 2 Добавлено через 1 минуту А великий смысл по замыслу разработчиков, возможно, состоял в том, чтобы как-то хотя бы условно разделять типы для хранения целочисленных значений и типы для хранения символов
0
|
387 / 214 / 102
Регистрация: 09.04.2012
Сообщений: 635
|
|
07.07.2012, 03:47 | 5 |
В signed char 1 бит занимает знак, в unsigned char знака нет. Размер типа char 8 бит.
0
|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
|
07.07.2012, 13:17 | 8 |
при передаче значения по неконстантной ссылке должно быть точное совпадения типов, а, как объяснили выше, char, unsigned char и signed char -- это три разных типа, хоть они и одного размера. потому и не компилируется.
если передавать параметр в функцию по константной ссылке, то компилятор осуществит приведение типов и все скомпилируется.
1
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
07.07.2012, 14:15 | 11 |
У меня VS 2010 и char знаковый. Как-то я столкнулся с проблемой при обработке русских букв функциями из cctype. Судя по советам на этом форуме, получается, что такие компиляторы есть. У меня такое подозрение, что одним из них является VS 2008. Или это не так?
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||||||||||
07.07.2012, 17:38 | 13 | ||||||||||
Не пойму тогда, почему у него (у кого VS 2008) такой код при вводе русских букв работал:
код
код
0
|
387 / 151 / 16
Регистрация: 12.05.2011
Сообщений: 450
|
|
07.07.2012, 17:46 | 14 |
isdigit принимает в качестве аргумента int (не знаю, почему, кстати), и корректно работает с signed char только если signed char предварительно кастануть в unsigned char.
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
07.07.2012, 18:38 | 15 |
Может я и ошибаюся, но мне кажется, что isdigit() нужен unsigned int и не больше 255. Если коды русских букв из знакового char привести к int, то получится отрицательное число. Если отрицательное привести к unsigned int, то больше 255, поэтому и сбой в isdigit().
0
|
08.07.2012, 10:50 | 20 |
Напиши. Я тебе объяснил возможную логику, которой руководствовались те, кто это дело проектировал. А сейчас махать руками и кричать "почему сделали так, а не эдак" никакого смысла не имеет. Я со всякими юникодами и прочими не работал, но, возможно, что эти интерфейсы и сейчас воспринимают больше, чем диапазон от 0 до 255
Добавлено через 5 минут Как оно в glibc реализовано - см. тут http://sourceware.org/git/?p=g... a4;hb=HEAD Надо это немного вкурить и понять, оно уже включает в себя всякие расширенные кодировки или нет
1
|
08.07.2012, 10:50 | |
08.07.2012, 10:50 | |
Помогаю со студенческими работами здесь
20
Разница между new char[] и new char[]() Разница между char и int Signed Char -> Int Значения типов данных (signed, unsigned, char) Тип char.Signed/unsigned.Отличие типов данных. Выполнить операции для переменных типа signed char Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |