節穴で真実を見る

セキュアなコードの書き方 – セキュアな設計が最も重要(mycom.co.jp)より、MSの人が見抜けなかったバグ。

1:template <typename T>
2:
3:static T MaxInt() {
4: if( IsSigned() ) {
5:  return (T)~( 1 << ( BitCount()-1 ) );
6: }
7: //else
8: return (T)(~(T)0);
9:}

たしかにわからん。

正解は、5行目の左側の1をTにキャストしてからシフトしないと普通のintのシフトになってビットが消えちゃう、というものらしい。なるほどねぇ。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です