Python中文
首页
教程
问答
标签
搜索
登录
注册
Python:设置位计数(popcount)
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>在我的数据库(oracle 11g)中很少有blob被复制,它使用UTL_RAW.BIT_XOR对blob执行异或操作。之后,我想计算二进制字符串中的设置位数,所以写了上面的代码。</p> <p>在一个小实验中,我想看看产生的十六进制和整数值是什么,并编写了这个过程。。</p> <pre><code>SQL> declare 2 3 vblob1 blob; 4 5 BEGIN 6 7 select leftiriscode INTO vblob1 FROM irisdata WHERE irisid=1; 8 9 dbms_output.put_line(rawtohex(vblob1)); 10 11 12 dbms_output.put_line(UTL_RAW.CAST_TO_binary_integer(vblob1)); 13 14 15 END; 16 / </code></pre> <p>输出:十六进制:</p> <pre><code>0F0008020003030D030C1D1C3C383C330A3311373724764C54496C0A6B029B84840547A341BBA83D BB5FB9DE4CDE5EFE96E1FC6169438344D604681D409F9F9F3BC07EE0C4E0C033A23B37791F59F84F F94E4F664E3072B0229DA09D9F0F1FC600C2E380D6988C198B39517D157E7D66FE675237673D3D28 3A016C01411003343C76740F710F0F4F8FE976E1E882C186D316A63C0C7D7D7D7D397F016101B043 0176C37E767C7E0C7D010C8302C2D3E4F2ACE42F8D3F3F367A46F54285434ABB61BDB53CBF6C7CC0 F4C1C3F349B3F7BEB30E4A0CFE1C85180DC338C2C1C6E7A5CE3104303178724CCC5F451F573F3B24 7F24052000202003291F130F1B0E070C0E0D0F0E0F0B0B07070F1E1B330F27073F3F272E2F2F6F7B 2F2E1F2E4F7EFF7EDF3EBF253F3D2F39BF3D7F7FFED72FF39FE7773DBE9DBFBB3FE7A76E777DF55C 5F5F7ADF7FBD7F6AFE7B7D1FBE7F7F7DD7F63FBFBF2D3B7F7F5F2F7F3D7F7D3B3F3B7FFF4D676F7F 5D9FAD7DD17F7F6F6F0B6F7F3F767F1779364737370F7D3F5F377F2F3D3F7F1F2FE7709FB7BCB77B 0B77CF1DF5BF1F7F3D3E4E7F197F571F7D7E3F7F7F7D7F6F4F75FF6F7ECE2FFF793EFFEDB7BDDD1F FF3BCE3F7F3FBF3D6C7FFF7F7F4FAF7F6FFFFF8D7777BF3AE30FAEEEEBCF5FEEFEE75FFEACFFDF0F DFFFF77FFF677F4FFF7F7F1B5F1F5F146F1F1E1B3B1F3F273303170F370E250B INTEGER VALUE: 15 </code></pre> <p>十六进制代码与生成的整数值之间存在差异,因此使用以下python代码检查实际整数值。</p> <pre><code>print int("0F0008020003030D030C1D1C3C383C330A3311373724764C54496C0A6B029B84840547A341BBA83D BB5FB9DE4CDE5EFE96E1FC6169438344D604681D409F9F9F3BC07EE0C4E0C033A23B37791F59F84F F94E4F664E3072B0229DA09D9F0F1FC600C2E380D6988C198B39517D157E7D66FE675237673D3D28 3A016C01411003343C76740F710F0F4F8FE976E1E882C186D316A63C0C7D7D7D7D397F016101B043 0176C37E767C7E0C7D010C8302C2D3E4F2ACE42F8D3F3F367A46F54285434ABB61BDB53CBF6C7CC0 F4C1C3F349B3F7BEB30E4A0CFE1C85180DC338C2C1C6E7A5CE3104303178724CCC5F451F573F3B24 7F24052000202003291F130F1B0E070C0E0D0F0E0F0B0B07070F1E1B330F27073F3F272E2F2F6F7B 2F2E1F2E4F7EFF7EDF3EBF253F3D2F39BF3D7F7FFED72FF39FE7773DBE9DBFBB3FE7A76E777DF55C 5F5F7ADF7FBD7F6AFE7B7D1FBE7F7F7DD7F63FBFBF2D3B7F7F5F2F7F3D7F7D3B3F3B7FFF4D676F7F 5D9FAD7DD17F7F6F6F0B6F7F3F767F1779364737370F7D3F5F377F2F3D3F7F1F2FE7709FB7BCB77B 0B77CF1DF5BF1F7F3D3E4E7F197F571F7D7E3F7F7F7D7F6F4F75FF6F7ECE2FFF793EFFEDB7BDDD1F FF3BCE3F7F3FBF3D6C7FFF7F7F4FAF7F6FFFFF8D7777BF3AE30FAEEEEBCF5FEEFEE75FFEACFFDF0F DFFFF77FFF677F4FFF7F7F1B5F1F5F146F1F1E1B3B1F3F273303170F370E250B",16) </code></pre> <p>回答:</p> <pre><code>611951595100708231079693644541095422704525056339295086455197024065285448917042457 942011979060274412229909425184116963447100932992139876977824261789243946528467423 887840013630358158845039770703659333212332565531927875442166643379024991542726916 563271158141698128396823655639931773363878078933197184072343959630467756337300811 165816534945075483141582643531294791665590339000206551162697220540050652439977992 246472159627917169957822698172925680112854091876671868161705785698942483896808137 210721991100755736178634253569843464062494863175653771387230991126430841565373390 924951878267929443498220727531299945275045612499928105876210478958806304156695438 684335624641395635997624911334453040399012259638042898470872203581555352191122920 004010193837249388365999010692555403377045768493630826307316376698443166439386014 145858084176544890282148970436631175577000673079418699845203671050174181808397880 048734270748095682582556024378558289251964544327507321930196203199459115159756564 507340111030285226951393012863778670390172056906403480159339130447254293412506482 027099835944315172972281427649277354815211185293109925602315480350955479477144523 387689192243720928249121486221114300503766209279369960344185651810101969585926336 07333771272398091 </code></pre> <p>为了获得设置的位计数,我用C编写了以下代码:</p> <pre><code>int bitsoncount(unsigned x) { unsigned int b=0; if(x > 1) b=1; while(x &= (x - 1)) b++; return b; } </code></pre> <p>当我在python中尝试相同的代码时,它不起作用。我对python很陌生,因为我正在尝试的好奇心,如果我错了,请原谅。</p> <pre><code>def bitsoncount(x): b=0; if(x>1): b=1; while(x &= (x-1)): </code></pre> <p>我在最后一行遇到错误,需要一些帮助来解决这个问题并在python中实现逻辑:-)</p> <p>我很有兴趣在python中查看set bits版本!</p> <p>相关问题:<a href="https://stackoverflow.com/questions/109023/best-algorithm-to-count-the-number-of-set-bits-in-a-32-bit-integer">Best algorithm to count the number of set bits in a 32-bit integer?</a></p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>你在用什么版本的Python? 首先,Python使用空格而不是分号,所以要开始它应该像这样。。。</p> <pre><code> def bitsoncount(x): b=0 while(x > 0): x &= x - 1 b+=1 return b </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
VirtualEnvRapper错误:路径python2(来自python=python2)不存在
7 回答
virtualenvs上的pyinstaller,没有名为导入错误的模块
6 回答
virtualenvs是否可以退回到用户包而不是系统包?
9 回答
virtualenvwrapper CentOS7
10 回答
virtualenvwrapper IOError:[Errno 13]权限被拒绝
7 回答
virtualenvwrapper mkproject和shell在windows中的启动问题?
3 回答
virtualenvwrapper mkvirtualenv不工作但没有错误
8 回答
Virtualenvwrapper python bash
6 回答
virtualenvwrapper:“workon”何时更改到项目目录?
2 回答
virtualenvwrapper:mkvirtualenv可以工作,但是rmvirtualenv返回bash:没有这样的文件或目录
6 回答
virtualenvwrapper:virtualenv信息存储在哪里?
9 回答
virtualenvwrapper:命令“python设置.pyegg_info“失败,错误代码为1
10 回答
virtualenvwrapper:如何将mkvirtualenv的默认Python版本/路径更改为ins
4 回答
Virtualenvwrapper:模块“pkg_resources”没有属性“iter_entry_points”
1 回答
Virtualenvwrapper:没有名为virtualenvwrapp的模块
9 回答
Virtualenvwrapper.bash_profi的正确设置
10 回答
Virtualenvwrapper.hook:权限被拒绝
4 回答
virtualenvwrapper.sh:fork:资源暂时不可用Python/Djang
5 回答
Virtualenvwrapper.shlssitepackages命令不工作
8 回答
Virtualenvwrapper.sh函数在bash sh中不可用
2 回答