位运算

题目:

有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

for num in range(6,58):
    a = num >> 4 & 3
    b = num >> 2 & 3
    c = num & 3
    if( (a^b) and (b^c) and (c^a) ):
        print a+1,b+1,c+1

解释:

最小的数是123最大的数是432


二进制里面 :
00 01 10分别可以表示0 1 2
11 10 01分别可以表示3 2 1

合起来看 :
00 01 10是6
11 10 01是57

3的二进制表示是 :
11

如果两个数做异或运算等于0,例如 a^b 等于 0 ,则a和b一定相等;

程序的意思是:
如果两两分割的这3组数,分别代表 百 、 十 、个,那么右移4位与3再加1得到百位,右移2位
与3再加1得到十位,右移0位与3再加1得到个位,其中要剔除重复的(用异或运算剔除);

整理自:http://www.imooc.com/wenda/detail/389261

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容