Bit Manipulation
来源:互联网 发布:淘宝直通车推广方案 编辑:程序博客网 时间:2024/05/16 05:04
From: career up 150.
1. Question:
Given an integer, print the next smallest and next largest number that have the same number of 1 bits in their binary representation.
Answer:
Number Properties Approach for Next Number
Observations:
»»If we “turn on” a 0, we need to “turn off” a 1
»»If we turn on a 0 at bit i and turn off a 1 at bit j, the number changes by 2^i - 2^j.
»»If we want to get a bigger number with the same number of 1s and 0s, i must be bigger than j.
Solution:
1. Traverse from right to left. Once we’ve passed a 1, turn on the next 0. We’ve now increased the number by 2^i. Yikes! Example: xxxxx011100 becomes xxxxx111100
2. Turn off the one that’s just to the right side of that. We’re now bigger by 2^i - 2^(i-1) Example: xxxxx111100 becomes xxxxx101100
3. Make the number as small as possible by rearranging all the 1s to be as far right as possible: Example: xxxxx101100 becomes xxxxx100011
To get the previous number, we do the reverse.
1. Traverse from right to left. Once we’ve passed a zero, turn off the next 1. Example: xxxxx100011 becomes xxxxx000011.
2. Turn on the 0 that is directly to the right. Example: xxxxx000011 becomes xxxxx010011.
3. Make the number as big as possible by shifting all the ones as far to the left as possible. Example: xxxxx010011 becomes xxxxx011100 .
2. Question:
Write a program to swap odd and even bits in an integer with as few instructions as possible (e.g., bit 0 and bit 1 are swapped, bit 2 and bit 3 are swapped, etc).
>> cat swap.c #include <stdio.h>unsigned int swap(unsigned int i){ return (((i & 0xaaaaaaaa) >> 1) | ((i & 0x55555555) << 1));}int main(){ unsigned int i = 10; printf("%d\n", swap(i));}
3. From CLRS
Problems 4-2: Finding the missing integer
An array A[1 n] contains all the integers from 0 to n except one. It would be easy to determine the missing integer in O(n) time by using an auxiliary array B[0 n] to record which numbers appear in A. In this problem, however, we cannot access an entire integer in A with a single operation. The elements of A are represented in binary, and the only operation we can use to access them is "fetch the jth bit of A[i]," which takes constant time. Show that if we use only this operation, we can still determine the missing integer in O(n) time.
Answer:
http://www.cs.nyu.edu/courses/summer08/G22.1170-001/hw02-soln.pdf
http://stackoverflow.com/questions/5374539/report-all-missing-numbers-in-an-array-of-integers-represented-in-binary
http://geeksforgeeks.org/forum/topic/amazon-interview-question-for-software-engineerdeveloper-about-algorithms-bit-magic
Say all numbers are represented by k bits and set j as the least significant bit (initially the rightmost).
1. Starting from j, separate all the numbers in L into two sets (S1 containing all numbers that have 1 as its jth bit, and S2 containing all numbers that have 0 in that position).
2. The smaller of the two sets contains the missing number, recurse on this subset and set j = j-1
- Bit Manipulation
- Bit manipulation
- Bit manipulation
- Bit manipulation
- Bit Manipulation
- Bit Manipulation
- Bit manipulation
- Bit Manipulation
- Bit Manipulation
- Chapter8 Bit Manipulation
- KNOW: Bit Manipulation
- leetcode Bit Manipulation
- Bit Manipulation Reverse Bits
- Bit Manipulation - Subsets
- Bit Manipulation - Reverse Bits
- Leetcode:bit manipulation
- CC150 Bit manipulation
- Leetcode bit manipulation 总结
- ViewPager
- AnyChart图表控件使用指南(五)
- cocos2d过渡效果
- 一些iOS高效开源类库
- vm上的系统挂载U盘、CD
- Bit Manipulation
- redis中ziplist
- C#关于AutoResetEvent的使用介绍(转)
- 生成测试数据
- 大尾端小尾端
- sp11--cheat
- 进程管理(一)
- 解决jquery名称冲突
- VC6 各link错误解决