Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/120: Рейтинг темы: голосов - 120, средняя оценка - 4.82
касаткО
 Аватар для Jetu
51 / 51 / 4
Регистрация: 01.10.2011
Сообщений: 227

Signed/Unsigned

21.03.2012, 19:40. Показов 26347. Ответов 64
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Стал изучать ЯП C. Не совсем могу понять, что означает Signed и Unsigned (как я понял означает наличие знака(+ либо -) или его отсутствие). Не мог ли бы доходчиво объяснить, что это означает и в какой ситуации используется.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.03.2012, 19:40
Ответы с готовыми решениями:

Сложение signed и unsigned
Известно что при сложении signed и unsigned будет результирующий тип unsigned. Подскажите пожалуйста правило согласно которому так будет...

Как перевести Unsigned в Signed
Есть функция, которая получает на вход char(число). Я хочу передать туда dword,но в результате получаю не то из-за знака. На входе...

Сравнение чисел unsigned и signed
Результат: 60000 и -5536. По какому принципу выводится значение, если заданное число выходит из диапазона, как в коде? Диапазоны:...

64
Эксперт .NET
 Аватар для Rius
13846 / 7889 / 1706
Регистрация: 25.05.2015
Сообщений: 23,954
Записей в блоге: 14
22.01.2021, 20:33
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Nexi99 Посмотреть сообщение
вопрос в том реализовано это компиляторами или делать это нужно вручную через Ассемблер.
Аппаратно. Доступ есть и на ассемблере, и на C/C++.
0
144 / 28 / 4
Регистрация: 06.05.2019
Сообщений: 1,839
Записей в блоге: 4
22.01.2021, 21:05
Цитата Сообщение от Rius Посмотреть сообщение
Аппаратно. Доступ есть и на ассемблере, и на C/C++.
на с++ это реализовано кончено, на ассемблере я думаю будет лучше. Меня очень интересует тема по созданию битовых массивов.
0
23.01.2021, 09:26

Не по теме:

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
То есть вы можете, если вам так захочется, размещать в этом регионе свои булевские переменные. Но никакого "ускорения" от работы с одним битом вместо одного байта вы при этом не получите. Все это делалось не для ускорения, а для обеспечения атомарности битового доступа в многопоточном окружении.
И для упрощения кода.
Каждый бит "битового массива" получает свой адрес в другой области адресного пространства, и к каждому биту можно обращаться, как к обычной переменной на Си.
При этом в объектном коде будет меньше битовых операций ( ~ | ^ & >> << на Си ).
А так как исполняемых инструкций меньше, то и времени на их выборку и декодирование потребуется чуть меньше.
Аппаратуре всё равно придётся считывать целиком слово, содержаще нужный бит, изменять его, и "сохранять" обратно.

Миниатюры
Signed/Unsigned  
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,350
23.01.2021, 10:16
Цитата Сообщение от Evg Посмотреть сообщение
Что такое "выдадут"?
Вообще я думал, что при таких значениях компилятор должен выдать ошибку. Но не выдаёт:

C
1
2
signed char x = 200;
unsigned  char y = -100;
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13228 / 6860 / 1827
Регистрация: 18.10.2014
Сообщений: 17,384
23.01.2021, 10:38
Цитата Сообщение от alexu_007 Посмотреть сообщение
Вообще я думал, что при таких значениях компилятор должен выдать ошибку. Но не выдаёт:

C
1
2
signed char x = 200;
unsigned  char y = -100;
С чего бы это вдруг? Integer conversions никто не отменял. Компилятор может выдать нестандартное диагностическое сообщение, не более того.

Хотите стандартное диагностическое сообщение - используйте {}-инициализацию в любой ее форме

C++
1
2
signed char x = { 200 };
unsigned char y = { -100 };
Она запрещает сужающие преобразования.
3
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
23.01.2021, 10:46
Выпрашивать надо.
Bash
1
2
3
4
gcc -pedantic -c -x c /dev/stdin << END
signed char x = 200;
unsigned char y = -'z';
END
Code
1
2
3
 warning: overflow in conversion from ‘int’ to ‘signed char’ changes value from ‘200’ to ‘-56’ [-Woverflow]
    1 | signed char x = 200;
      |                 ^~~
А то, что -'z' конвертировалось в неотрицательное, компилятор меньше волнует.

Добавлено через 2 минуты
Универсальной {}-инициализации пока нет в Си, к сожалению:
Code
1
2
3
4
5
6
/dev/stdin:1:15: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token
    1 | signed char x { 200 };
      |               ^
/dev/stdin:1:22: warning: ISO C does not allow extra ‘;’ outside of a function [-Wpedantic]
    1 | signed char x { 200 };
      |                      ^
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13228 / 6860 / 1827
Регистрация: 18.10.2014
Сообщений: 17,384
23.01.2021, 10:48
Цитата Сообщение от politoto Посмотреть сообщение
Универсальной {}-инициализации пока нет в Си, к сожалению:
А при чем здесь С? Речь идет о С++.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
23.01.2021, 10:51
При том, что на Си пример, который привёл alexu_007.
(И изначальный ТС почти 8 лет назад задавал вопрос о Си)
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13228 / 6860 / 1827
Регистрация: 18.10.2014
Сообщений: 17,384
23.01.2021, 11:04
Цитата Сообщение от politoto Посмотреть сообщение
Выпрашивать надо.
Code
1
gcc -pedantic
Очередной баг gcc... С чего бы это вдруг эта нестандартная диагностика оказалась под -pedantic, а не под -Wall?

Цитата Сообщение от politoto Посмотреть сообщение
Универсальной {}-инициализации пока нет в Си, к сожалению:
А зачем вы убрали =? Тема не имеет вообще никакого отношения к универсальной инициализации. Я же изначально написал: = {} и это прекрасно скомпилируется в С. Такие инициализаторы есть в С - оттуда они и пришли. Вот чего нет в С, так это запрета на сужающие преобразования в таких инициализаторах.

Цитата Сообщение от politoto Посмотреть сообщение
При том, что на Си пример, который привёл alexu_007.
Просто неправильная постановка тегов.

Цитата Сообщение от politoto Посмотреть сообщение
И изначальный ТС почти 8 лет назад задавал вопрос о Си
Я думаю, что ТС просто не понимал разницы.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
23.01.2021, 11:29
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Очередной баг gcc... С чего бы это вдруг эта нестандартная диагностика оказалась под -pedantic, а не под -Wall?
Есть ещё MSVC:
Windows Batch file
1
cl -c -Wall nice.c -nologo
Code
1
nice.c(3): warning C4245: инициализация: преобразование "int" в "unsigned char", несоответствие типов со знаком и без
У gcc можно выпросить диагностику на оба преобразования:
Bash
1
2
3
4
gcc -c -Wconversion -с -x c /dev/stdin   << END
signed char x = { 200 };
unsigned char y = {-'z'};
END
Code
1
2
3
4
5
6
/dev/stdin:1:19: warning: conversion from ‘int’ to ‘signed char’ changes value from ‘200’ to ‘-56’ [-Wconversion]
    1 | signed char x = { 200 };
      |                   ^~~
/dev/stdin:2:20: warning: unsigned conversion from ‘int’ to ‘unsigned char’ changes value from ‘-122’ to ‘134’ [-Wsign-conversion]
    2 | unsigned char y = {-'z'};
      |                    ^
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Я думаю, что ТС просто не понимал разницы.
Судя по этой теме, в то время ТС уже знал, что Си и С++ - разные языки:
Компилятор под C
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13228 / 6860 / 1827
Регистрация: 18.10.2014
Сообщений: 17,384
23.01.2021, 11:37
Цитата Сообщение от politoto Посмотреть сообщение
У gcc можно выпросить диагностику на оба преобразования:
Диагностика естественная, но нестандартная, поэтому есть она или нет ее - все приемлемо. Меня лишь удивил тот факт, что в gcc эта диагностика отсутствует по умолчанию, отсутствует при -Wall -Wextra, но появляется при -pedantic. Где логика?

Clang такими загадками не страдает.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
23.01.2021, 12:01
Цитата Сообщение от politoto Посмотреть сообщение
Судя по этой теме, в то время ТС уже знал, что Си и С++ - разные языки:
Тогда почему тег и вопрос по C, а раздел C++?
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
23.01.2021, 13:57
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Меня лишь удивил тот факт, что в gcc эта диагностика отсутствует по умолчанию, отсутствует при -Wall -Wextra, но появляется при -pedantic. Где логика?
Что значат всевозможные -Wxxx - на усмотрение вендора, согласно некоторым стандартам.
Но у gcc есть ещё куча нестандартных параметров.
Молчаливость gcc по умолчанию не удивляет: куча чудо-юдо-код по умолчанию собирается именно этим компилятором.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
24.01.2021, 00:29
Раз уж начали за переполнения, как с ним бороться ?
Можно указать компилятору что бы при переполнении генерировалось исключение к примеру ?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13228 / 6860 / 1827
Регистрация: 18.10.2014
Сообщений: 17,384
24.01.2021, 00:42
Цитата Сообщение от SmallEvil Посмотреть сообщение
Раз уж начали за переполнения, как с ним бороться ?
Можно указать компилятору что бы при переполнении генерировалось исключение к примеру ?
То, о чем мы здесь пока говорили - это вопросы времени компиляции, которые никто "переполнением" не называет. О каких исключениях вообще может идти речь во время компиляции?

"Переполнением" называется переполнение знаковой арифметики во время выполнения. Это может ловить, к примеру, gcc с ключом -ftrapv. Но этот ключ будет ловить переполнения при арифметике, но не переполнения при преобразованиях.
2
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
24.01.2021, 03:41
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
"Переполнением" называется переполнение знаковой арифметики во время выполнения. Это может ловить, к примеру, gcc с ключом -ftrapv. Но этот ключ будет ловить переполнения при арифметике, но не переполнения при преобразованиях.
ну вот я и спрашивал именно про переполнения, во время выполнения, опробую.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13228 / 6860 / 1827
Регистрация: 18.10.2014
Сообщений: 17,384
24.01.2021, 08:29
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это может ловить, к примеру, gcc с ключом -ftrapv. Но этот ключ будет ловить переполнения при арифметике, но не переполнения при преобразованиях.
Например, -ftrapv отловит такое переполнение

C
1
2
3
4
int main()
{
  int a = INT_MAX - 10, b = 20, c = a + b;
}
но не отловит такого

C
1
2
3
4
int main()
{
  short a = SHRT_MAX - 10, b = 20, c = a + b;
}
ибо формально никакого переполнения в последнем случае нет, а есть сужающее преобразование с потерей значения.

Другими словами -ftrapv призван отлавливать undefined behavior. А сужающее преобразование с потерей значения - это implementaion-defined behavior (а сейчас в С++, кажется, вообще полностью defined behavior), поэтому на него -ftrapv не реагирует.
1
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,350
25.01.2021, 09:01
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
С чего бы это вдруг? Integer conversions никто не отменял.
Ну как бы если в переменную "помещаются" числа от -128 до 128, то попытка записать туда большее значение должно привести к ошибке. Если такое присваивание изначально присутствует в тексте программы - должен заругаться компилятор. Мне кажется это логичным.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
25.01.2021, 09:43
8-битный char по умолчанию как signed постепенно устаревает.
http://www.open-std.org/jtc1/s... 3.html#GB1
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13228 / 6860 / 1827
Регистрация: 18.10.2014
Сообщений: 17,384
25.01.2021, 10:04
Цитата Сообщение от politoto Посмотреть сообщение
8-битный char по умолчанию как signed постепенно устаревает.
http://www.open-std.org/jtc1/s... 3.html#GB1
Не заметил, как это следует из написанного по ссылке.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.01.2021, 10:04

Comparison between signed and unsigned integer expressions
Много вот таких варнингов: Comparison between signed and unsigned integer expressions FreeBSD 10 gcc 4.8 Ввожу:gmake libthecore...

Значения типов данных (signed, unsigned, char)
Програмирую я месяца два,но не понимаю значения типов данных : signed, unsigned, char...Помогите..

Тип char.Signed/unsigned.Отличие типов данных.
Вопрос немного может быть не туда... Прошу прощения. Пишу прошивку к контроллеру, на С. Интересует отличие типов данных. ДОпустим есть тип...

[C++ Warning] Unit1.cpp(24): W8012 Comparing signed and unsigned values
Код : #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; using namespace std; ...

Надо перевести переменную типа unsigned char* в signed int и обратно
у меня есть переменная типа unsigned char*, мне нужно перевести ее в signed int , провести арифметические вычисления и затем перевести ее...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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 и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru