14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460

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

15.12.2015, 17:52. Показов 5628. Ответов 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
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.12.2015, 18:01
Ну может, для каких-то маленьких чисел. Процессор поддерживает такой формат и С++ тоже.
0
Неэпический
 Аватар для Croessmah
18131 / 10715 / 2064
Регистрация: 27.09.2012
Сообщений: 27,009
Записей в блоге: 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
7803 / 6567 / 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru