pusofalse 发表于 2010-9-25 23:38:46

10道位运算题目。

本帖最后由 pusofalse 于 2010-9-25 23:58 编辑

旨在学习位运算,解题时禁止使用各种判断、循环语句,和+ - * / ^、> < >=<=运算符和比较符,并且只能调用以下这些函数:

1、BitAnd
2、BitOR
3、BitXOR
4、BitNot
5、BitShift
6、BitRotate
7、Random(用于测试随机数据)
8、MsgBox (用于输出结果)

1)、对2进行位运算之后,使结果为64。

2)、将0x2D041020高低位互换,即转换为0x10202D04。

3)、调用Random(-100, 100, 1)函数生成一个随机整数,并判断是否是偶数。

4)、调用Random(-100, 200, 1)函数生成一个随机整数,并判断是否为负数。

5)、判断随机数的最后3位是否为111,例如:
随机数为36615,其2进制为:
        36615(2)        0000 0000 0000 0000 1000 1111 0000 0111 最后3位为111,结果为True。
        36614(2)        0000 0000 0000 0000 1000 1111 0000 0110 最后3位为110,结果为False。

6)、$a、$b两变量的初始值分别为7和13,将$a、$b两变量的值相交换,即$a=13,$b=7,禁止引入第三个变量。

7)、将随机数第10位上的数取反,其他位不变。例如:
随机数为36615,右起第10位上的数取反之后,结果将是36103。计算如下:
        36615(2)        0000 0000 0000 0000 1000 1111 0000 0111
        36103(2)        0000 0000 0000 0000 1000 1101 0000 0111

8)、取随机数右边位连续的1,例如:
随机数为847,取右边连续的1,结果为15,计算如下:
        847(2)                0000 0000 0000 0000 0000 0011 0100 1111
        15(2)                0000 0000 0000 0000 0000 0000 0000 1111

9)、分别取-4和5的绝对值,禁止使用Abs函数。

10)、将右起第1位的数变为1,例如:
        4(2)                0000 0000 0000 0000 0000 0000 0000 0100
        5(2)                0000 0000 0000 0000 0000 0000 0000 0101

        ; 如果原本就是1,保持其位不变。
        5(2)                0000 0000 0000 0000 0000 0000 0000 0101
        5(2)                0000 0000 0000 0000 0000 0000 0000 0101

rolaka 发表于 2010-9-26 14:05:07

本帖最后由 rolaka 于 2010-9-26 15:00 编辑

**** Hidden Message *****
两题没有做出来... oh...有雷同的 都是巧合{:face (396):}

3mile 发表于 2010-9-26 14:29:19

本帖最后由 3mile 于 2010-9-26 16:20 编辑

只做到第九题。
**** Hidden Message *****

rolaka 发表于 2010-9-26 14:55:32

只做到第九题。
3mile 发表于 2010-9-26 14:29 http://www.autoitx.com/images/common/back.gif

我俩都忘记隐藏了...

C.L 发表于 2010-9-26 15:17:27

本帖最后由 C.L 于 2010-9-26 15:54 编辑

忘了用代码框了,更改一下

**** Hidden Message *****

liufenglg 发表于 2010-9-26 15:20:21

回复学习..

liufenglg 发表于 2010-9-26 15:34:19

本帖最后由 liufenglg 于 2010-9-26 15:39 编辑

**** 本内容被作者隐藏 ****
两题没有做出来... oh...有雷同的 都是巧合
rolaka 发表于 2010-9-26 14:05 http://www.autoitx.com/images/common/back.gif


    $t = Random(-100, 200, 1);Random(-100, 100, 1)
MsgBox(0, "0正1负->" & $t, BitAND(BitRotate($t, 1, "B"), 1))
这个有问题
不要B
$t = Random(-50000, 50000, 1);36615
MsgBox(0, "F&T->" & $t, BitAND(BitAND($t, 7), 1))
1为什么不换成7呢,结果为7就是

rolaka 发表于 2010-9-26 15:36:54

本帖最后由 rolaka 于 2010-9-26 15:40 编辑

$t = Random(-100, 200, 1);Random(-100, 100, 1)
MsgBox(0, "0正1负->" & $t, BitAND(BitRotat ...
liufenglg 发表于 2010-9-26 15:34 http://www.autoitx.com/images/common/back.gif
奥 是d 不是b

被你误导了 8bits就够了

100的二进制是
1100100
在8bit之内的 没有问题

rolaka 发表于 2010-9-26 15:44:46

$t = Random(-100, 200, 1);Random(-100, 100, 1)
MsgBox(0, "0正1负->" & $t, BitAND(BitRotat ...
liufenglg 发表于 2010-9-26 15:34 http://www.autoitx.com/images/common/back.gif
惯性思维罢了 相差了0.006ms而已

lixiaolong 发表于 2010-9-26 16:02:16

这个题目很难啊,看看学习

liufenglg 发表于 2010-9-26 16:11:32

本帖最后由 liufenglg 于 2010-9-26 16:16 编辑

第9题
$a = -4
$b = 5
MsgBox(0, "", BitAND($a,7))
8

rolaka 发表于 2010-9-26 16:16:27

第9题
$a = -4
$b = 5
MsgBox(0, "", BitAND($a,7))
8
MsgBox(0, "", BitAND($a,0xffff))
liufenglg 发表于 2010-9-26 16:11 http://www.autoitx.com/images/common/back.gif
=.= 原来都是分开写的 我以为要用一个步骤来判断...

t87564833 发表于 2010-9-26 16:56:36

看不懂题目的悄悄路过

shenrenba 发表于 2010-9-26 18:49:47

本帖最后由 shenrenba 于 2010-9-26 19:12 编辑

1: MsgBox(0,"",BitRotate(2,5))

2:想不出来

3:$str=Random(-100, 100, 1)
MsgBox(0,"0为偶数,1为奇数",$str&@CRLF&BitAND($str,1))

pusofalse 发表于 2010-9-26 19:06:09

感谢诸位参与,代码都精彩极了,学习了~!

第8(取连续的1)、第9(求绝对值)题中,用到了一个+运算符,同样没符合要求。


; 1
MsgBox(0, BitShift(2, -5), "对2进行位运算之后,使结果为64。")

; 2
$iVar = BitOR(BitShift(0x2D041020, 16), BitShift(0x2D041020, -16))
MsgBox(0, Hex($iVar), "将0x2D041020高低位互换,即转换为0x10202D04。")

; 3
$iRandom = Random(-100, 100, 1)
MsgBox(0, BitAnd($iRandom, 1) <> 1, "判断" & $iRandom & "是否是偶数。")

; 4
$iRandom = Random(-100, 100, 1)
MsgBox(0, BitShift($iRandom, 31) <> 0, "判断" & $iRandom & "是否是负数。")

; 5
$iRandom = Random(-100, 100, 1)
MsgBox(0, BitAnd($iRandom, 7) = 7, "判断" & $iRandom & "的最后3位是否为111。")

; 6
Local $a = 7, $b = 13
$a = BitXOR($a, $b)
$b = BitXOR($a, $b)
$a = BitXOR($a, $b)
MsgBox(0, "a=" & $a & ", b=" & $b, "将$a、$b两变量的值相交换。")

; 7
$iRandom = Random(1, 100, 1)
MsgBox(0, BitXOR(BitShift(1, -9), $iRandom), "将" & $iRandom & "第10位上的数取反,其他位不变。")

; 8
$iRandom = 847
MsgBox(0, BitShift(BitXOR($iRandom, $iRandom + 1), 1), "取" & $iRandom & "右边位连续的1。")

; 9
$i = Random(-200, 100, 1)
$iVar = BitXOR(BitShift($i, 31), $i) + (BitShift($i, 31) <> 0)
MsgBox(0, $i & " -> " & $iVar, "取" & $i & "的绝对值,禁止使用Abs函数。")

; 10
$iRandom = Random(1, 100, 1)
MsgBox(0, BitOR($iRandom, 1), "将" & $iRandom & "右起第1位的数变为1。")
页: [1] 2
查看完整版本: 10道位运算题目。