Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
cflood
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 37
#1

Unary minus operator applied to unsigned type, result still unsigned

26.06.2013, 15:19. Просмотров 618. Ответов 4
Метки нет (Все метки)

Подскажите, имеем следующий код:

Кликните здесь для просмотра всего текста

C++
1
2
3
signed int a = -0x80000000;
signed int b = -1;
signed int c = (a / b);


В итоге компилятор выдаёт "unary minus operator applied to unsigned type, result still unsigned", разжуйте пожалуйста почему это происходит. Может быть что 0x80000000 - предел для int? и надо попробовать число поменьше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2013, 15:19
Ответы с готовыми решениями:

Convert std::streamoff to unsigned type from cstdint
Всем привет! Задача: передать размер файла по сети. Как это правильно...

char operator[](unsigned short offset) const; // что означает const?
Собстенно вопрос уже озвучен :).

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

Не понятный undefined reference to `unsigned long long f<unsigned long long, void>
test.cpp: #include &lt;iostream&gt; template &lt;typename FormalType, typename...

Как исправить ошибку невозможно преобразовать аргумент 1 из "unsigned int" в "unsigned int []"?
Ребят, срочно прошу вас помочь.. Есть ошибка (невозможно преобразовать...

4
alsav22
5441 / 4836 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2013, 16:22 #2
Цитата Сообщение от cflood Посмотреть сообщение
Может быть что 0x80000000 - предел для int? и надо попробовать число поменьше.
Может быть...

Добавлено через 36 минут
Старший разряд занят, поэтому некуда поместить знак числа. Получается, что максимально число, к которому можно применить унарный минус (в 32 разрядных системах): 0x7FFFFFFF.
1
Archi0
28 / 14 / 5
Регистрация: 18.07.2013
Сообщений: 176
03.08.2014, 07:52 #3
0-0x80000000 = -0x7FFFFFFF-1
0
ValeryS
Модератор
7219 / 5482 / 682
Регистрация: 14.02.2011
Сообщений: 18,542
03.08.2014, 08:10 #4
Цитата Сообщение от cflood Посмотреть сообщение
signed int a = -0x80000000;
а теперь посмотри что происходит
для того чтобы поменять знак числа нужно перевести его в дополнительный код
т.е инвертировать все биты и добавить 1
~0x80000000= 0x7FFFFFFF
0x7FFFFFFF+1=0x80000000
от чего ушли к тому и пришли
0
Archi0
28 / 14 / 5
Регистрация: 18.07.2013
Сообщений: 176
03.08.2014, 08:18 #5
Так, что надо просто написать 0-0x80000000 раз без бинарного минуса не обойтись, столкнулся с этой ошибкой когда пытался привести __int64 к __int32 c проверкой на потерю данных. Оказалось, что числа 0xF.. считаются без знаковыми (даже если приписать signed перед ними в скобочках) и сравнение идёт не так как планировалось, а написав то, что и вы -0x80000000 получил ошибку.
0
03.08.2014, 08:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2014, 08:18

Разница int, short, unsigned int, unsigned short
Есть например цикл который проходит по массиву в котором 100 элементов. В чем...

Signed/Unsigned
Здравствуйте! Стал изучать ЯП C. Не совсем могу понять, что означает Signed и...

unsigned на плюсах
unsigned на плюсах, помогите разобраться, когда её нужно юзать, а когда нет) та...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru