Видел много это int num = (-23) & 0x7fffffff но там и не нашел этому объяснения, так что это значит? Я слышал что убирает знак, но какой знак если не выходе максимальное число (int32) - 23
Как правило старший бит - знаковый (если он 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)
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости