32位整数的二进制表示中有多少个1
2016-03-17 16:24
330 查看
思路1:
运行结果当num= -1(11111111111111111111111111111111)时死循环?是不是因为不论是/2还是>>1,都属于算术右移操作,对于负数而言前面都补1而不是补0,所以死循环。
思路2:n&(n-1),n每减一次少一个1(把一个整数减去1后再和原来的整数做与操作,相当于对原整数的最右边的1做取反),一直重复到没有1
C++版本的可以,但是用python写的就不能通过,-1不能输出,python中的负数表示有什么不同么?
在stackoverflow上有人给出了答案,原来python中的数字是以任意长度存储的,因此当输入-1的时候,num会一直减——减小,
![](http://img.blog.csdn.net/20160320143954149)
大概样子就是上面这样,当所以当然会一直死循环,那怎么改变呢?只要把num变成32位的就行,首先num = num&(0xffffffff),这样就可以了
准则1:整数n和n-1与,相当于n中最后一位1取反
准则2:异或操作,相同为0,不同为1. 输入两个整数m, n,需要改变m中的多少位才能变成n? 只改变m和n之间位不同的就可以。怎么监测位是否相同? 按位异或,不同为1,所以m异或n,计算结果中1的个数。
def countOnes(self, num): # write your code here if num < -2147483648 or num > 2147483647: return None count = 0 while num: if num%2 == 1: count += 1 num = num/2 return count
运行结果当num= -1(11111111111111111111111111111111)时死循环?是不是因为不论是/2还是>>1,都属于算术右移操作,对于负数而言前面都补1而不是补0,所以死循环。
思路2:n&(n-1),n每减一次少一个1(把一个整数减去1后再和原来的整数做与操作,相当于对原整数的最右边的1做取反),一直重复到没有1
int countOnes(int num) { // write your code here int count =0; while(num){ count ++; num = num&(num-1); } return count; }
C++版本的可以,但是用python写的就不能通过,-1不能输出,python中的负数表示有什么不同么?
def countOnes(num): count = 0 while(num): count += 1 num = num&(num-1) return count
在stackoverflow上有人给出了答案,原来python中的数字是以任意长度存储的,因此当输入-1的时候,num会一直减——减小,
大概样子就是上面这样,当所以当然会一直死循环,那怎么改变呢?只要把num变成32位的就行,首先num = num&(0xffffffff),这样就可以了
def countOnes(num): num = num & (0xffffffff) count = 0 while(num): count += 1 num = num&(num-1) return count
准则1:整数n和n-1与,相当于n中最后一位1取反
准则2:异或操作,相同为0,不同为1. 输入两个整数m, n,需要改变m中的多少位才能变成n? 只改变m和n之间位不同的就可以。怎么监测位是否相同? 按位异或,不同为1,所以m异或n,计算结果中1的个数。
相关文章推荐
- Python计算机视觉编程练习14:pyspider爬虫--安装篇
- HTML5 - 使用<video>播放视频
- zoj2109fatmouse
- ElasticSearch最新版本下载地址
- C - Sigma Function(LightOJ 1336)
- instance variable 'name' accessed in class method
- SpringMVC的拦截器Interceptor
- 设计模式之装饰模式
- 首贴纪念
- Laravel 快速开发标准文档
- SharedPreference 存储小量数据,一般首次启动显示引导界面就用这个。
- ElasticSearch最新版本下载地址
- [leetcode] @python 114. Flatten Binary Tree to Linked List
- No valid signing identities (i.e. certificate and private key pair) matching the team ID “(null)” were found.
- 三星手机拍照,上传照片或者下载导致图片旋转90°的解决办法。
- Android获取微信公众号推送消息历史记录
- webkit linux 方向键移动焦点
- zoj 1171 sort the photo
- zoj1076 gene assembly
- SpringMVC中的DispatcherServlet详解