Ответ 1
Продвижение до int
происходит на byte
, потому что для них не определено двоичное дополнение.
См. Унарные числовые рекламные акции и Оператор побитового дополнения.
Изначально, когда вы вызываете ~
по значению без знака 8 бит 10101100
, оно повышается до 32-разрядного значения знака 0...010101100
. Его дополнением является 32-битное значение 1...101010011
, которое равно -173 для int
. Приведение этого результата в byte
является понижением к 8-битовому значению без знака 01010011
, теряющему самые значительные 24 бита. Конечный результат интерпретируется как 83
в представлении без знака.