[已解决,多谢谢大家。]问一个左移问题以及如何定义32位整数?
本帖最后由 onepc 于 2011-6-14 11:27 编辑比如我定义一个32位整数,每位都是全1
这时我用左移24位,那么我想得到的值是11111111后面是24个0
??????
MsgBox(0,"",BitShift(4294967295,-24))
我用这个得不到我要的值,还是负数的。。。。怎么让它把进位的都去掉? 超出限制了吧,还是用字符串处理的方式吧。 是啊,用C来也是变成负数了,,,,我还以为只要定义成32位,他就会把多出来的去掉。。
int test=4294967295;
int ooo = test<<24;
printf("%d\n",ooo); AutoIt中没有 无符号和有符号的区别,所有的数都会被认为是有符号的。你运行得到的负数是正确的,因为运算结果被解析成了有符号数。另外,4294967295这个数已经超出了AutoIt的32位数的范围,在AutoIt中,这个数是64位的。
强制转换为无符号32位数:
$tUnsigned32 = DllStructCreate("ulong")
DllStructSetData($tUnsigned32, 1, BitShift(-1, -24))
MsgBox(0, "", DllStructGetData($tUnsigned32, 1)) 要用无符号表示,嗯,是啊,有符号的范围只在21。。。。。那里,无符号才是46,,。。。
谢谢楼上的。 回复 3# onepc
看下printf函数的帮助吧,%d表示的是有符号32位,输出结果自然就是有符号的,改成%u试试。这只是输出结果,ooo真正的值取决于它的类型,使用int类型,在32位系统中当然就是32位有符号数了,使用ulong或dword,当然就是32位无符号。
页:
[1]