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

Типы данных - где нужно использовать char, а где unsigned char?

15.12.2015, 17:52. Показов 5957. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!

У меня вопрос, искал ответ на него, но безуспешно. Вопрос следующий: есть два типа char и unsigned char. Я понимаю, что в первом случае диапазон хранимых значений меньше, потому что есть один бит для знака, во втором случае диапазон хранимых значений больше, но нет знака, потому что старший бит занят под знак.

Теперь вопрос:
зачем нужен просто тип char в С++, где может потребоваться минус ? Ведь если есть ASCII таблица, то в ней нет минуса.
Где нужно использовать char, а где unsigned char?

Заранее спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.12.2015, 17:52
Ответы с готовыми решениями:

Char unsigned char signed char длинна Кааак
Здравствуйте. char l = {0,0}; l = 0xff; Почему, меня, компилятор не посылает куда подальше. Нет он конечно...

С помощью typedef определите типы: unsigned char, константный
ПОМОГИТЕ ПОЖАЛУЙСТА! Пробовал, не получается С помощью typedef определите типы: unsigned char, константный unsigned char, указатель на...

Приведение типов unsigned char[2] to unsigned char [64]
Добрый день! Подскажите пожалуйста, как поступить. Есть простая функция main int main() { SHA1Context sha; uint8_t...

7
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.12.2015, 18:01
Ну может, для каких-то маленьких чисел. Процессор поддерживает такой формат и С++ тоже.
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
15.12.2015, 18:03
Цитата Сообщение от Blitzor DDD Посмотреть сообщение
Где нужно использовать char, а где unsigned char?
Например там, где char используется не для символов.
Ведь если есть ASCII таблица, то в ней нет минуса.
главное двоичное представление


А сам char может быть и unsigned сразу.
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
15.12.2015, 18:10
Лучший ответ Сообщение было отмечено Blitzor DDD как решение

Решение

Существует одна тонкость, касающаяся преобразования символов в целые числа: язык не определяет, являются ли переменные типа char знаковыми или беззнаковыми. Может ли при преобразовании char в int когда-нибудь получиться отрицательное число? На машинах с разной архитектурой ответы могут отличаться. На некоторых машинах значение типа char у которого старший бит равен единице будет преобразовано в отрицательное число (так называемое «распространение знакового разряда»). На других — преобразование char в int осуществляется путем добавления нулей слева, и, таким образом, получаемое значение всегда положительно.

Гарантируется, что любой символ из стандартного набора печатаемых символов никогда не будет отрицательным числом, поэтому в выражениях такие символы всегда являются положительными операндами. Но произвольный восьмибитовый код в переменной типа char на одних машинах может быть отрицательным числом, а на других — положительным. Для совместимости переменные типа char, в которых хранятся данные не являющиеся символами, следует явно определять как signed или unsigned.
В языке C++ для хранения однобайтового символа используется тип данных char. Переменную типа char можно рассматривать двояко: как целое число, занимающее 1 байт и способное принимать значения от -128 до 127 (тип signed char, есть также беззнаковая модификация unsigned char, принимающая значения от 0 до 255) и как один символ текста. Само по себе определение char может оказаться как знаковым, так и беззнаковым, в зависимости от операционной системы и компилятора. Поэтому использовать тип char не рекомендуется, лучше явно указывать будет ли он знаковым (signed) или беззнаковым (unsigned).
...
0
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
15.12.2015, 18:21  [ТС]
nord_v, Спасибо, дружище!
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
15.12.2015, 18:32
Цитата Сообщение от Blitzor DDD Посмотреть сообщение
есть два типа char и unsigned char. Я понимаю, что в первом случае диапазон хранимых значений меньше, потому что есть один бит для знака, во втором случае диапазон хранимых значений больше, но нет знака, потому что старший бит занят под знак.
вы ошибаетесь.
есть три типа данных:

char платформо зависимый
signed char знаковый
unsigned char беззнаковый

char в зависимости от платформы может быть эквевалетным знаковому,
либо беззнаковому

Цитата Сообщение от Blitzor DDD Посмотреть сообщение
где может потребоваться минус ?
в ситуациях, где из соображений экономичности захочется хранить данные
в виде 1 байтовых циферок, которые могут быть отрицательными.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.12.2015, 20:21
Здесь другое не ясно: если символам важно быть беззнаковыми целыми, то почему функции из <cstring> не используют явно unsigned char.
0
Заблокирован
30.07.2017, 00:42
Цитата Сообщение от nmcf Посмотреть сообщение
если символам важно быть беззнаковыми целыми
Важно, чтобы значения, которыми кодируются символы из basic execution character set, были неотрицательными. А не "быть беззнаковыми целыми".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.07.2017, 00:42
Помогаю со студенческими работами здесь

Сделать преобразование unsigned char в char, а затем типу int
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char - для копеек. Собственно что мне...

Std::fstream почему функция write принимает параметр char* а не unsigned char* (аля byte*) ?
Ну собственно сабж... std::fstream fs; fs.write((char*)..) В случае бинарного потока я допустим пишу байты функцией write, как...

Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ?
Вопрос такой, почему в методе setnamedisc нужно использовать char *s для установки значения, а при возвращении значения в методе...

Неверная конверсия из char* в unsigned char*
Здравствуйте. Почему-то ловлю ошибку, гласящую о том, что не удалась конверсия из char* в *unsigned char*. Не понимаю, почему она вылазит?...

Ошибка "значение типа "const char [81]" нельзя использовать для инициализации сущности типа "const unsigned char [61]"
Прошу помощи, так как раньше прога работала, сейчас решил вернуться и выдает ошибку: #pragma once #include...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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 . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru