動作確認
MSP430 (16bit)
#define MAX_OS_U16 ( (1u << 16) - 1 )
上記で定義したMAX_OS_U16を使おうとしたら以下の警告が出た。
Warning[XXX]: shift count is too large
16bitのOSなので16ビット左シフトしているのがまずいとのことのようだ。
思いつき
#define MAX_OS_U16 ( (1u << 15) + (1u << 15) - 1 )
4ビットを上限とした例でデバッグ
http://ideone.com/BhkdtK
#include <iostream>
using namespace std;
#define MAX_OS_U4_TYPE_A ( (1u << 4) - 1)
#define MAX_OS_U4_TYPE_B ( (1u << 3) + (1u << 3) - 1)
int main() {
cout << MAX_OS_U4_TYPE_A << endl;
cout << MAX_OS_U4_TYPE_B << endl;
return 0;
}
結果
15
15
いけそう。
いけた。警告が16なくなった。