~(~0 << n)

自分の好きなビット演算をメモしておく。
2^n-1を計算するときってほぼ無条件に(1 << n)-1を使ってしまう*1
が、(1 << n)-1は、~(~0 << n)と書くことも出来る。


残念なのは両式共にバイト数が同じだということ。
しかし、諦めてはいけません!
定数~0が変数に格納されている時は後者はさらに短縮できます!
a=~0としたとき

a << n^a

と書けます。演算子の優先順位のおかげで括弧が省けて2byteお得
変数に~0が入ってるときって滅多にないような気もしますが

while(n--){...}

のループ抜けた後とかで意外と結構あるので覚えておくと役にたったり立たなかったり

*1:すくなくとも自分は