Я знаю, что правильный сдвиг отрицательного подписи зависит от реализации, но что делать, если я выполняю сдвиг влево? Например:
int i = -1;
i << 1;
Является ли это корректным?
Я думаю, что стандарт не говорит о отрицательном значении с подписанным типом
если E1 имеет подписанный тип и неотрицательное значение, а E1 × 2 E2 - представляемый в типе результата, то это результирующее значение; в противном случае поведение undefined.
Он только уточняет, что если результат не представлен в подписанном типе, то поведение undefined.