Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
Note:
- The given integer is guaranteed to fit within the range of a 32-bit signed integer.
- You could assume no leading zero bit in the integer’s binary representation.
Example 1:
Input: 5
Output: 2
Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
Example 2:
Input: 1
Output: 0
Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.
idea: we only want to flip the lower k bits (k is the bits number of num)
Solution 1: use mask to find the leftmost 1 of num, and then use ~mask to make only the k lowest bits to be 1(k is the bits number of num), and then & ~num to get the result.
class Solution { public: int findComplement(int num) { unsigned mask=INT_MAX; while((mask&num)!=0){ mask= mask << 1; } return (~mask & ~num); } };
Solution 2: the needed mask is (2^(int)log(num))-1=(1<<(int)log(num))-1
class Solution { public: int findComplement(int num) { return ~num & ((1 <<(int)log2(num))-1); } };
c++ 类的对象与指针
c++ 联合体
用户输入一个数字,找到所有能够除尽它的数的总个数
javascript
今天的排版
论学习php的方法
我想对所有新程序员说的一些话
注册表单
安卓机器人
- 最新文章
-
[转]Linux+XAMPP+eolinker开源版v3.2.4
Linux mysql 基础操作
linux下解决非本机访问出现的提示
dispatch_async 与 dispatch_get_global_queue (转)
为什么应用程序用户启动时崩溃,使用xcode打开却不会 (转)
ios 启动画面
大牛-从他们那学到了很多
(转)linux下搭建生成HLS所需的.ts和.m3u8文件
Your build settings specify a provisioning profile with the UUID, no provisioning profile was found (转载)
转:加密(ios)