@@ -4,19 +4,19 @@ import "fmt"
4
4
5
5
// http://graphics.stanford.edu/~seander/bithacks.html
6
6
7
- //平行计算,异或压缩奇偶信息,压缩顺序:1->2->4->8->16->32
7
+ //平行计算,异或压缩奇偶信息,压缩顺序:1->2->4->8->16->32.
8
8
func judgeBinOddOne1 (x uint ) bool {
9
9
const intSize = 32 << (^ uint (0 ) >> 63 )
10
10
var i uint = 1
11
11
for i < intSize {
12
- x = x ^ ( x >> i )
12
+ x ^ = x >> i
13
13
i *= 2
14
14
}
15
15
return x & 1 == 1
16
16
}
17
17
18
18
// 一个二进制数减1,若右起第一个1的索引位置是m,那么从m到0位的二进制会逐位取反。
19
- // 所以,x &= x-1会使得从m到0位的二进制都会变成0。
19
+ // 所以,x &= x-1会使得从m到0位的二进制都会变成0。.
20
20
func judgeBinOddOne2 (x uint ) bool {
21
21
cnt := 0
22
22
for x > 0 {
@@ -27,7 +27,7 @@ func judgeBinOddOne2(x uint) bool {
27
27
return cnt & 1 == 1
28
28
}
29
29
30
- //查表法:256区间内1的个数表
30
+ //查表法:256区间内1的个数表.
31
31
func judgeBinOddOne3 (x uint ) bool {
32
32
var bitmap256 = [256 ]int {0 }
33
33
for i := 1 ; i < 256 ; i ++ {
@@ -36,7 +36,7 @@ func judgeBinOddOne3(x uint) bool {
36
36
cnt := 0
37
37
for x != 0 {
38
38
cnt += bitmap256 [x & 0xff ]
39
- x = x >> 8
39
+ x >>= 8
40
40
}
41
41
fmt .Printf ("judgeBinOddOne has one: %d\n " , cnt )
42
42
return cnt & 1 == 1
@@ -55,7 +55,7 @@ func judgeBinOddOne3(x uint) bool {
55
55
// 就变成了16个段,每段2位。
56
56
// 同理(n&0x33333333)+((n>>2)&0x33333333)将16个段中相邻的两个段两两相加,
57
57
// 存放在4bits中,就变成了8个段,每段4位。
58
- // 以此类推,最终求得数中1的个数就存放在一个段中,这个段32bits,
58
+ // 以此类推,最终求得数中1的个数就存放在一个段中,这个段32bits,.
59
59
func judgeBinOddOne4 (x uint ) bool {
60
60
const intSize = 32 << (^ uint (0 ) >> 63 )
61
61
var bMap = map [int ][]uint {
@@ -86,7 +86,7 @@ func judgeBinOddOne4(x uint) bool {
86
86
func judgeBinOddOne5 (x uint ) bool {
87
87
//parity map
88
88
var pMap = make ([]uint , 0 )
89
- var p2 = func (n uint ) ( []uint ) {
89
+ var p2 = func (n uint ) []uint {
90
90
return []uint {n , n ^ 1 , n ^ 1 , n }
91
91
}
92
92
var p4 = func (n uint ) (r []uint ) {
@@ -119,12 +119,12 @@ func judgeBinOddOne5(x uint) bool {
119
119
var p uint = 0
120
120
for x != 0 {
121
121
p ^= pMap [x & 0xff ]
122
- x = x >> 8
122
+ x >>= 8
123
123
}
124
124
return p == 1
125
125
}
126
126
127
- //并行查奇偶表:0110 1001 1001 0110 (0x6996 in hex)
127
+ //并行查奇偶表:0110 1001 1001 0110 (0x6996 in hex).
128
128
func judgeBinOddOne6 (x uint ) bool {
129
129
const intSize = 32 << (^ uint (0 ) >> 63 )
130
130
if intSize == 64 {
@@ -137,7 +137,7 @@ func judgeBinOddOne6(x uint) bool {
137
137
return (0x6996 >> x )& 1 == 1
138
138
}
139
139
140
- //multiple 8 operations
140
+ //multiple 8 operations.
141
141
func judgeBinOddOne7 (x uint ) bool {
142
142
const intSize = 32 << (^ uint (0 ) >> 63 )
143
143
iMap := map [int ]uint {
0 commit comments