1

2 nと 2 n-1を計算するマクロを作成しようとしています。それは次のようになります。

#define b(n) (2 << (n))
#define a(n) ((b(n))-1)

ただし、何らかの理由でこれは としてキャストされますintが、私は喜んで を使​​用しますunsigned long int。これを解決する方法を知っている人はいますか?インライン関数を使おうと思ったのですが、関数風マクロとインライン関数の違いがよくわかりません。

4

1 に答える 1

1

OPが望んunsigned long intでいる場合、マクロでそのタイプを使用します

#define b(n) (1UL<<((unsigned)(n)))

OP を使用する(2 << (n))と、結果は typeint2あり、 anintです。and を含む演算子<<は にintなりunsignedますint。代わりにunsigned全体で使用します。


さらに、をエミュレートするために、確かに OP は左にシフトするのではなく、左にシフトpower(2,n)することを望んでいました。12

于 2013-10-12T04:11:27.007 に答える