Я смотрел на F # документ по битовым операциям:
Битовый оператор правого сдвига .В результате получается первый операнд с битами, сдвинутыми вправо на количество бит во втором операнде.Биты, сдвинутые из наименее значимой позиции, не превращаются в наиболее значимую позицию.Для беззнаковых типов старшие биты дополняются нулями.Для типов со знаком наиболее значимые биты дополняются единицами.Тип второго аргумента - int32.
Что послужило причиной такого выбора дизайна по сравнению с языком C ++ (и, вероятно, тоже C), где MSB дополняется нулями?Например:
int mask = -2147483648 >> 1; // C++ code
, где -2147483648 =
10000000 00000000 00000000 00000000
и маска равна 1073741824
, где 1073741824 =
01000000 00000000 00000000 00000000
Теперь, есливы пишете тот же код на F # (или C #), это действительно добавит MSB к ним, и вы получите -1073741824.
где -1073741824 =
11000000 00000000 00000000 00000000