找回密码
 加入
搜索
查看: 2091|回复: 5

[AU3基础] [已解决,多谢谢大家。]问一个左移问题以及如何定义32位整数?

  [复制链接]
发表于 2011-6-14 09:05:14 | 显示全部楼层 |阅读模式
本帖最后由 onepc 于 2011-6-14 11:27 编辑

比如我定义一个32位整数,每位都是全1
这时我用左移24位,那么我想得到的值是11111111后面是24个0
??????

MsgBox(0,"",BitShift(4294967295,-24))
我用这个得不到我要的值,还是负数的。。。。怎么让它把进位的都去掉?
发表于 2011-6-14 09:09:28 | 显示全部楼层
超出限制了吧,还是用字符串处理的方式吧。
 楼主| 发表于 2011-6-14 09:15:39 | 显示全部楼层
是啊,用C来也是变成负数了,,,,我还以为只要定义成32位,他就会把多出来的去掉。。
int test=4294967295;
int ooo = test<<24;
printf("%d\n",ooo);
发表于 2011-6-14 09:24:53 | 显示全部楼层
AutoIt中没有 无符号和有符号的区别,所有的数都会被认为是有符号的。你运行得到的负数是正确的,因为运算结果被解析成了有符号数。另外,4294967295这个数已经超出了AutoIt的32位数的范围,在AutoIt中,这个数是64位的。

强制转换为无符号32位数:
$tUnsigned32 = DllStructCreate("ulong")
DllStructSetData($tUnsigned32, 1, BitShift(-1, -24))

MsgBox(0, "", DllStructGetData($tUnsigned32, 1))
 楼主| 发表于 2011-6-14 09:31:59 | 显示全部楼层
要用无符号表示,嗯,是啊,有符号的范围只在21。。。。。那里,无符号才是46,,。。。
谢谢楼上的。
发表于 2011-6-14 09:44:09 | 显示全部楼层
回复 3# onepc

看下printf函数的帮助吧,%d表示的是有符号32位,输出结果自然就是有符号的,改成%u试试。这只是输出结果,ooo真正的值取决于它的类型,使用int类型,在32位系统中当然就是32位有符号数了,使用ulong或dword,当然就是32位无符号。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-2 01:24 , Processed in 0.089288 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表