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 15:00 编辑
**** Hidden Message *****
两题没有做出来... oh...有雷同的 都是巧合{:face (396):} 本帖最后由 3mile 于 2010-9-26 16:20 编辑
只做到第九题。
**** Hidden Message ***** 只做到第九题。
3mile 发表于 2010-9-26 14:29 http://www.autoitx.com/images/common/back.gif
我俩都忘记隐藏了... 本帖最后由 C.L 于 2010-9-26 15:54 编辑
忘了用代码框了,更改一下
**** Hidden Message ***** 回复学习.. 本帖最后由 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: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之内的 没有问题 $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而已 这个题目很难啊,看看学习 本帖最后由 liufenglg 于 2010-9-26 16:16 编辑
第9题
$a = -4
$b = 5
MsgBox(0, "", BitAND($a,7))
8 第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
=.= 原来都是分开写的 我以为要用一个步骤来判断... 看不懂题目的悄悄路过 本帖最后由 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))
感谢诸位参与,代码都精彩极了,学习了~!
第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