> -- Пётр Кушнир писал(а):
> Блин! Я и не подумал, что он там может быть. Глянул в описании языка, а там нету. Ндааа...
Ну, а если вам так важна "чистота" языка - можете ввести константные массивы SET масок, которые будете накладывать на результат арифметического сдвига для "нейтрализации" размножившегося знакового бита... Индекс в массиве масок как раз и будет задаваться величиной сдвига. Тока не забудьте, что в элементе по индексу 0 должны быть все единицы!... И элементов в таком массиве будет на 1 больше максимально возможного сдвига ( байт - 9, короткое целое - 17, целое - 33 )

ЗЫ Кстати, такие массивы масок я и в сишнык проектах применяю. Они у меня в мой собственный defs.h всегда входят.
Очень удобно иметь их и для левых и для правых сдвигов (или один "правосторнний", но его сдвигать "до упора" влево, если надо)... Кроме того, можно и сами значения масок двигать и получать нужные маски "в середине" исследуемой переменной. В последнем случае индекс становится длинной выделяемой или обнуляемой последовательности битов... Если позволяет память (а под виндой - естественно!) можете создавать двумерный массив из таких масок. Тогда первым индексом будет номер бита, с которого надо наложить маску, а второй - количество маскируемых битов...