判断一个数字是否2的N次方(source)

500阅读 0评论2009-03-21 jianzk
分类:

     d                 ds
     d bitads                  1      4a
     d bitan                   1      4b 0
     d bita1                   1      1a
     d bita2                   2      2a
     d bita3                   3      3a
     d bita4                   4      4a
     d                 ds
     d bitbds                  1      4a
     d bitbn                   1      4b 0
     d bitb1                   1      1a
     d bitb2                   2      2a
     d bitb3                   3      3a
     d bitb4                   4      4a
     d                 ds
     d bitcds                  1      4a
     d bitcn                   1      4b 0
     d bitc1                   1      1a
     d bitc2                   2      2a
     d bitc3                   3      3a
     d bitc4                   4      4a
     d numeri9a        s              9  0 inz(0)
     d numeri9b        s              9  0 inz(0)
     c     *entry        plist
     c                   parm                    numeri9           9
     c**
     c                   bitoff    '01234567'    bita1
     c                   bitoff    '01234567'    bita2
     c                   bitoff    '01234567'    bita3
     c                   bitoff    '01234567'    bita4
     c                   bitoff    '01234567'    bitb1
     c                   bitoff    '01234567'    bitb2
     c                   bitoff    '01234567'    bitb3
     c                   bitoff    '01234567'    bitb4
     c                   bitoff    '01234567'    bitc1
     c                   bitoff    '01234567'    bitc2
     c                   bitoff    '01234567'    bitc3
     c                   bitoff    '01234567'    bitc4
     c                   eval      numeri9a= %dec(numeri9:9:0)
     c                   eval      numeri9b= numeri9a - 1
     c                   eval      bitan = numeri9a
     c                   eval      bitbn = numeri9b
     c**
      /free
                        bitc1 = %bitxor(bita1:bitb1);
                        bitc2 = %bitxor(bita2:bitb2);
                        bitc3 = %bitxor(bita3:bitb3);
                        bitc4 = %bitxor(bita4:bitb4);
      /end-free
     c                   if            bitcn = bitan * 2 - 1
     c     '2222222'     dsply
     c                   else
     c     'not 2 '      dsply
     c                   endif
     c                   eval          *inlr = *on

上一篇:没有了
下一篇:program described file & invalid char(incomplete)