Чтобы оптимизировать мой код cpp, в некоторых случаях я пытаюсь использовать смещение вправо. Вот пример:
int main()
{
int i = (1 - 2) >> 31; // sizeof(int) == 4
...
...
}
Я напечатал i и получил -1. Это означает, что он будет использовать 1 вместо 0 для заполнения пустой позиции, если число отрицательное. Другими словами, -1 >> 31 работает следующим образом:
1111...1 <--- the result of (1 - 2), which is -1
1111...1 <--- -1 >> 31, 1 is used to fill in the empty position
Я просто хочу знать, четко ли определено это поведение или нет?
Если это UB в cpp, то как насчет Java?
>>делает расширение знака,>>>нет. См. Учебные руководства по Java™ — побитовые операторы и операторы побитового сдвига, или окончательный источник, спецификация языка Java, 15.19. Операторы сдвига. - person Andreas   schedule 01.08.2017