Я пытаюсь понять поведение побитовых операторов для подписанных и беззнаковых типов. В соответствии с документом ISO / IEC, я понимаю следующее.
Оператор левой смены
Результат
E1 << E2
, E1 сдвинутые влево битовые позиции E2Освободившиеся биты за счет сдвига влево будут заполнены нулями.
E1 как неотрицательный со знаком:
E1 << E2
приведет к E1, умноженному на 2 степени E2, если значение может быть представлено типом результата.Q1. А как насчет подписанных негативов?
Q2: Я не могу понять, что подразумевается под «приведенным по модулю» в следующем контексте. «Если E1 имеет беззнаковый тип, значение результата будет E1 × 2E2, уменьшенное на единицу больше, чем максимальное значение, представленное в типе результата».
Оператор правого сдвига
Результат
E1 >> E2
- E1 сдвинутые вправо битовые позиции E2.E1 как неотрицательное со знаком / без знака: значение результата является неотъемлемой частью частного E1 / 2E2.
Q3: Я вижу, что для отрицательных целых чисел со знаком в некоторых книгах указывается, что вакантные должности будут заполняться
1
. Пожалуйста, расскажите подробнее об использовании оператора сдвига вправо для отрицательного числа со знаком.