Я слышал, что переход на бит целого числа со знаком, т.е.
int test = INT_MAX;
test = (test<<1) + 1;
является неопределенным поведением из-за того, что test больше, чем INT_MAX. Но будет ли такое поведение встречаться в коротких переменных со знаком, т.е.
short test1 = SHRT_MAX;
test1 = (test1<<1) + 1;
?
На данный момент я не сталкивался с какой-либо соответствующей документацией.
РЕДАКТИРОВАТЬ: я знаю, что поведение undefined приведет к целым числам, но не к коротким.
short
s будут повышены доint
s перед сдвигом, что добавляет здесь дополнительную сложность. - person interjay   schedule 12.12.2018MAX_INT >= MAX_SHORT
всегда должно быть истинным, должны гарантировать правильное представлениеshort
вint
. Но когда дело доходит до сдвига, поведение зависит от машины и конкретных инструкций, закодированных компилятором. т.е. отрицательное число может стать положительным при сдвиге вправо и наоборот при сдвиге влево. Но что, если ЦП вместо этого использует арифметические сдвиги SAR/SAL? - person Frankie_C   schedule 12.12.2018