|
0 / 0 / 0
Регистрация: 28.04.2009
Сообщений: 118
|
|
Тип char.Signed/unsigned.Отличие типов данных.30.08.2009, 22:17. Показов 37788. Ответов 51
Метки нет (Все метки)
Вопрос немного может быть не туда... Прошу прощения. Пишу прошивку к контроллеру, на С. Интересует отличие типов данных. ДОпустим есть тип char и тип unsigned char. Первый -128...127, а второй 0...255 соответственно. Оба типа занимают 8 бит. В чем разница?? Или разница в обработки типов библиотеками(к примеру) или правильном распозновании например кодировки ASCII ну и т.д. Интересует разница на битовом уровне. Т.е. по идее и там и там 8 бит..
Вопрос появился, когда мне необходимо было считать байт из регистра. Для этого я завел переменную(допустим t) типа char, считал байт. Если я правильно понимаю t фактически это тоже байт памяти, поэтому при считывании регистра в эту переменную t у меня все эти 8 бит просто дублируются. Вопрос что бы изменилось если бы я переменную обозначил типа unsigned char?? И вообще пишут что тип char это символ, а мне не очень понятно ГДЕ/ЧТО/КАК этот символ. И как СИМВОЛ отличается от типа ИНТЕДЖЕР например(кроме того что int - 16 бит)??
0
|
|
| 30.08.2009, 22:17 | |
|
Ответы с готовыми решениями:
51
Значения типов данных (signed, unsigned, char)
Надо перевести переменную типа unsigned char* в signed int и обратно |
|
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
|
||
| 10.11.2010, 19:59 | ||
|
объявлена переменная (Bxbit1) типа (unsigned char) размером 1 бит(:1). при таком объявлении cout выводит символ, а вот если объявить unsigned Bxbit1:1, то выводить будет код символа(точнее, числовое значение переменной:1 или 0, что и нужно в данном случае). Вопрос как раз в том, что значит такое объявление, что это за тип - unsigned?
1
|
||
|
62 / 62 / 13
Регистрация: 27.01.2009
Сообщений: 279
|
||
| 10.11.2010, 20:03 | ||
|
1111 1111 = 255(unsigned) 1111 1111 = -1 (signed) вообще unsigned это не тип а модификатор типа может быть unsigned int, unsigned char, unsigned double а если просто как в вашем объявлении то под unsigned подразумеваеться неявно unsigned int(то есть число, а не символ для cout), тоже было бы если б вы объявили просто short или long
0
|
||
|
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
|
|||||||||||
| 10.11.2010, 20:08 | |||||||||||
|
norge_goth, спасибо, но это понятно.
объявление знакового/без знакового:
0
|
|||||||||||
|
62 / 62 / 13
Регистрация: 27.01.2009
Сообщений: 279
|
|
| 10.11.2010, 20:10 | |
|
0
|
|
|
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
|
|
| 10.11.2010, 20:13 | |
|
norge_goth, в таком случае почему код, приведенный выше, при объявлении по разному дает разный результат, если такие объявления эквивалентны?
0
|
|
|
62 / 62 / 13
Регистрация: 27.01.2009
Сообщений: 279
|
|||||||
| 10.11.2010, 20:21 | |||||||
(1) cout выводит как чар(символ) Си-еквивалент printf("%c", Bxbit1) (2) cout выводит как unsigned int(число) Си-еквивалент printf("%d", Bxbit1)
1
|
|||||||
|
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
|
|
| 10.11.2010, 20:48 | |
|
norge_goth, спасибо. а как заставить cout выводить unsigned char как не символ, а как число(аналог printf("%d", Bxbit1))?
0
|
|
|
62 / 62 / 13
Регистрация: 27.01.2009
Сообщений: 279
|
|||||||||||||||||
| 10.11.2010, 21:17 | |||||||||||||||||
|
1. Использовать тот же printf("%d", Bxbit1) в С++ никто не запрещает 2. Перегрузить cout, не разу не делал но предполагаю что можно аля:
3. Определить ф-ции типа myCout
4. использовать оператор приведения типов перед выводом:
намой взгляд оптимальный вариант 3. и 4. для 3. и 2. варианта можно даже переопределить операторы << чтоб было как в стандартном но эт уже по геморойней
1
|
|||||||||||||||||
|
64 / 64 / 12
Регистрация: 05.07.2010
Сообщений: 219
|
|
| 10.11.2010, 21:41 | |
|
norge_goth,
спасибо, последний вариант - оптимальный!
0
|
|
|
|
|||||||||||
| 10.11.2010, 23:39 | |||||||||||
Сообщение было отмечено как решение
РешениеВ случае, если процессор работает с целыми числами в дополнительном коде (а это так для всех "нормальных" процессоров и для большинства специализированных), то разница между знаковым типом и беззнаковым только в трактовке величины. Т.е. битовое представление int и unsigned int ничем не отличается. При операции сложения знаковых или беззнаковых типов для одного и того же набора параметров (в битовом представлении) получим один и тот же результат. Таким же свойством обладают операции вычитания, умножения, все побитовые операции, операция сдвига влево. Знаковость критична для операций деления и операций сдвига вправо. Так же знаковость критична при целочисленном преобразовании к более широкому типу. Т.е. преобразования char->int и unsigned char->int в общем случае НЕ эквивалентны Добавлено через 3 минуты Добавлено через 10 минут Добавлено через 8 минут Добавлено через 48 секунд
3
|
|||||||||||
|
62 / 62 / 13
Регистрация: 27.01.2009
Сообщений: 279
|
|||||||
| 11.11.2010, 00:05 | |||||||
0
|
|||||||
|
|
|
| 11.11.2010, 15:13 | |
|
norge_goth, имелись в виду арифметические операции и сравнения. В операции присваивания преобразование не нужно, потому как там делается копирование значения. А в арифметических операциях и сравнениях как бы делается "трактовка значения", т.е. некое виртуальное преобразование битового набора, загруженного из памяти, в некоторое "число", над которым можно производить действия.
0
|
|
| 11.11.2010, 15:13 | |
|
Приведение типов unsigned char[2] to unsigned char [64] 8-битовый тип signed char может представлять значения от -128 до 127 Signed/Unsigned Сложение signed и unsigned Сравнение чисел unsigned и signed Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|