0 / 0 / 0
Регистрация: 24.06.2013
Сообщений: 37
|
||||||
1 | ||||||
Unary minus operator applied to unsigned type, result still unsigned26.06.2013, 15:19. Показов 1563. Ответов 4
Метки нет (Все метки)
Подскажите, имеем следующий код:
Кликните здесь для просмотра всего текста
В итоге компилятор выдаёт "unary minus operator applied to unsigned type, result still unsigned", разжуйте пожалуйста почему это происходит. Может быть что 0x80000000 - предел для int? и надо попробовать число поменьше.
0
|
26.06.2013, 15:19 | |
Ответы с готовыми решениями:
4
Преобразование unsigned short в unsigned char Convert std::streamoff to unsigned type from cstdint char operator[](unsigned short offset) const; // что означает const? Приведение типов unsigned char[2] to unsigned char [64] |
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
26.06.2013, 16:22 | 2 |
Может быть...
Добавлено через 36 минут Старший разряд занят, поэтому некуда поместить знак числа. Получается, что максимально число, к которому можно применить унарный минус (в 32 разрядных системах): 0x7FFFFFFF.
1
|
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
|
03.08.2014, 07:52 | 3 |
0-0x80000000 = -0x7FFFFFFF-1
0
|
Модератор
8902 / 6672 / 917
Регистрация: 14.02.2011
Сообщений: 23,499
|
|
03.08.2014, 08:10 | 4 |
а теперь посмотри что происходит
для того чтобы поменять знак числа нужно перевести его в дополнительный код т.е инвертировать все биты и добавить 1 ~0x80000000= 0x7FFFFFFF 0x7FFFFFFF+1=0x80000000 от чего ушли к тому и пришли
0
|
31 / 17 / 5
Регистрация: 18.07.2013
Сообщений: 220
|
|
03.08.2014, 08:18 | 5 |
Так, что надо просто написать 0-0x80000000 раз без бинарного минуса не обойтись, столкнулся с этой ошибкой когда пытался привести __int64 к __int32 c проверкой на потерю данных. Оказалось, что числа 0xF.. считаются без знаковыми (даже если приписать signed перед ними в скобочках) и сравнение идёт не так как планировалось, а написав то, что и вы -0x80000000 получил ошибку.
0
|
03.08.2014, 08:18 | |
Помогаю со студенческими работами здесь
5
Не понятный undefined reference to `unsigned long long f<unsigned long long, void> Как исправить ошибку невозможно преобразовать аргумент 1 из "unsigned int" в "unsigned int []"? Bad operand type int for unary operator '!' Undefined reference to `operator new[](unsigned int)' Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |