Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
cflood
0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 37
#1

Unary minus operator applied to unsigned type, result still unsigned - C++

26.06.2013, 15:19. Просмотров 459. Ответов 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? и надо попробовать число поменьше.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2013, 15:19     Unary minus operator applied to unsigned type, result still unsigned
Посмотрите здесь:

C++ что за тип unsigned?
Unsigned integer 24 bit C++
C++ Signed/Unsigned
unsigned itoa and atoi C++
C++ Разница int, short, unsigned int, unsigned short
C++ unsigned на плюсах
Unsigned long в с++ C++
C++ Unsigned char to vector
C++ Unsigned char to string
Тип unsigned short C++
Convert std::streamoff to unsigned type from cstdint C++
C++ Сложение int и unsigned

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5410 / 4806 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
26.06.2013, 16:22     Unary minus operator applied to unsigned type, result still unsigned #2
Цитата Сообщение от cflood Посмотреть сообщение
Может быть что 0x80000000 - предел для int? и надо попробовать число поменьше.
Может быть...

Добавлено через 36 минут
Старший разряд занят, поэтому некуда поместить знак числа. Получается, что максимально число, к которому можно применить унарный минус (в 32 разрядных системах): 0x7FFFFFFF.
Archi0
28 / 14 / 4
Регистрация: 18.07.2013
Сообщений: 166
03.08.2014, 07:52     Unary minus operator applied to unsigned type, result still unsigned #3
0-0x80000000 = -0x7FFFFFFF-1
ValeryS
Модератор
6449 / 4915 / 451
Регистрация: 14.02.2011
Сообщений: 16,298
03.08.2014, 08:10     Unary minus operator applied to unsigned type, result still unsigned #4
Цитата Сообщение от cflood Посмотреть сообщение
signed int a = -0x80000000;
а теперь посмотри что происходит
для того чтобы поменять знак числа нужно перевести его в дополнительный код
т.е инвертировать все биты и добавить 1
~0x80000000= 0x7FFFFFFF
0x7FFFFFFF+1=0x80000000
от чего ушли к тому и пришли
Archi0
28 / 14 / 4
Регистрация: 18.07.2013
Сообщений: 166
03.08.2014, 08:18     Unary minus operator applied to unsigned type, result still unsigned #5
Так, что надо просто написать 0-0x80000000 раз без бинарного минуса не обойтись, столкнулся с этой ошибкой когда пытался привести __int64 к __int32 c проверкой на потерю данных. Оказалось, что числа 0xF.. считаются без знаковыми (даже если приписать signed перед ними в скобочках) и сравнение идёт не так как планировалось, а написав то, что и вы -0x80000000 получил ошибку.
Yandex
Объявления
03.08.2014, 08:18     Unary minus operator applied to unsigned type, result still unsigned
Ответ Создать тему
Опции темы

Текущее время: 20:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru