位运算

作者: 二二二二呆 | 来源:发表于2018-05-06 14:56 被阅读0次

    题目:

    有四个数字: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

    相关文章

      网友评论

          本文标题:位运算

          本文链接:https://www.haomeiwen.com/subject/twrurftx.html