val & (2**n - 1)
例: 96 の 下位6ビットの値を取り出す
01100000 // 96
00111111 // (2**6)-1 -> 63 (077)
結果: 00100000 // 32
( val1 ^ val2 )
例1:
// val1 = 1, val2 = 1 のとき
0001 //val1
0001 //val2
0000 //val1 ^ val2 は0になる
例2:
// val1 = 1, val2 = 2 のとき
0001 //val1
0010 //val2
0011 //val1 ^ val2 は0以外になる
- ある整数のうちのバイトが、別の整数のバイトと同じであるか調べる
val1 & val2
例1:
// val1 = 0xC0000040, val2 = 0x00000040 のとき (ある整数のうちのバイトが、別の整数のバイトと同じであるとき)
0xC0000040 & 0x00000040
64 //val1 & val2 は 0以外になる
(0xC0000040) 11000000000000000000000001000000
(0x00000040) 00000000000000000000000001000000
例2:
// val1 = 0xC0000020, val2 = 0x00000040 のとき (ある整数のうちのバイトが、別の整数のバイトと同じではないとき)
0xC0000020 & 0x00000040
0 //val1 & val2 は 0 になる
(0xC0000020) 11000000000000000000000000100000
(0x00000040) 00000000000000000000000001000000
( val1 & 1 )
例1: ある整数 val1 が 奇数のとき
// val1 = 3
0011 //3
0001 //1
0001 //1
例2: ある整数 val2 が偶数のとき
// val2 = 4
0100 //4
0001 //1
0000 //0
つまり、ある整数が奇数のときは、& 1 の結果は、1になる
if ( val & 1 ) {
// 奇数の場合の処理
}
else {
//偶数の場合の処理
}
flg &= ~1; //flg = 1 のとき、flg はこれで 0 になる
0001 //1
1110 //-2 (1 の bitwise complement)
0000 //0
i が 277, n が 16の時、
277 & 0xfffffff0 // 0xfffffff0 は、'11111111111111111111111111110000'
=> 272
- ある整数xを、より大きな整数y単位のインデックスzに変換する (64バイト = 1ブロック である場合、70バイトが何ブロック目にあたるかを算出する場合など)
z = x + (y-1) >> yが2の何乗か
(1025 + 1023) >> 10 //1024 = 1単位とした場合、1025が何ブロック目にいるか
2