intrever(int num){ int m_1 = 0x55555555; // 0101 8对 int m_2 = 0x33333333; // 0011 8对 int m_4 = 0x0f0f0f0f; // 00001111 4对 int m_8 = 0x00ff00ff; int m_16 = 0x0000ffff; int b = ((num & m_16) << 16) + ((num >> 16) & m_16); // 右挪左,左侧右移16位 int c = ((b & m_8) << 8) + ((b >> 8) & m_8); int d = ((c & m_4) << 4) + ((c >> 4) & m_4); int e = ((d & m_2) << 2) + ((d >> 2) & m_2); int f = ((e & m_1) << 1) + ((e >> 1) & m_1); return f; } intmain(){ int a = 67; int b = rever(a); int c = rever(b); printf("%d %d", a, c); return0; }
leetcode.762 二进制表示中质数个计算置位
题目:给定两个整数 L 和 R ,找到闭区间 [L, R] 范围内,计算置位位数为质数的整数个数。(注意,计算置位代表二进制表示中1的个数。例如 21 的二进制表示 10101 有 3 个计算置位。还有,1 不是质数。)
1 2 3 4 5 6 7 8 9 10 11
intcountPrimeSetBits(int L, int R){ int res = 0; unordered_set<int> primes({2, 3, 5, 7, 11, 13, 17, 19}); for (int i = L; i <= R; i ++ ) { int s = 0; for (int j = i; j; j >>= 1) s += j & 1; if (primes.count(s)) res ++; } return res; }
leetcode.231 2的整次幂
题目:给定一个整数,编写一个函数来判断它是否是 2 的幂次方。
1 2 3
boolisPowerOfTwo(int n){ return n > 0 && ( n & -n ) == n; }