Число и "& 0x7fffffff

210
14 ноября 2018, 21:20

Видел много это int num = (-23) & 0x7fffffff но там и не нашел этому объяснения, так что это значит? Я слышал что убирает знак, но какой знак если не выходе максимальное число (int32) - 23

Answer 1

Как правило старший бит - знаковый (если он 1 - число отрицательное, 0 - положительное). С помощью маски (0x7fffffff) и коньюнкции старший бит сбрасывается в ноль, вне зависимости от его значения в исходном числе.

Но из-за того, что отрицательные числа записываются в дополнительном коде (знаковый бит - 1, а значение числа инвертировано, где обычно ноль - там единица и наоборот), эта операция - не эквивалент взятию модуля числа.

00000000 00000000 00000000 00010111‬ = 23 (DEC)
01111111 11111111 11111111 11111111‬ = 0x7fffffff (HEX)
&
00000000 00000000 00000000 00010111 = 23 (DEC)

Но при этом:

11111111 11111111 11111111 11101001 = -23 (DEC)
01111111 11111111 11111111 11111111‬ = 0x7fffffff (HEX)
&
01111111 11111111 11111111 11101001 = ‭2147483625‬ (DEC)
READ ALSO
adb + c# отправка файла

adb + c# отправка файла

Реализую в c# некоторые команды adbСтолкнулся с проблемой, если в пути (в названии) есть пробел или тире

166
Bitrix. Вывод 2 разных меню по условию

Bitrix. Вывод 2 разных меню по условию

У меня есть задача, вывести меню, гамбургер, в мобильной версииСделать это нужно так,что бы десктоп версии выводился 1 дизайн меню, а в мобильной...

186
“Неверный пароль” при авторизации

“Неверный пароль” при авторизации

Сделал такую авторизациюДо того зарегистрировал на "сайте" пользователя, его данные сохранились в БД

166
можно ли с помощью imagine yii2 получить изображение

можно ли с помощью imagine yii2 получить изображение

можно ли с помощью imagine yii2 получить изображение, а не сохранять егоТО есть сразу через ресайз получить обрезание изображение

172