私はビット演算でF#ドキュメントを見ていました:
ビット単位の右シフト演算子。結果は、ビットが2番目のオペランドのビット数だけ右にシフトされた最初のオペランドです。最下位位置からシフトされたビットは、最上位位置に回転されません。符号なしタイプの場合、最上位ビットにはゼロが埋め込まれます。符号付きタイプの場合、最上位ビットには1が埋め込まれます。2番目の引数の型はint32です。
MSBがゼロで埋められているC++言語(そしておそらくCも)と比較して、この設計選択の背後にある動機は何でしたか?例えば:
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