黑马程序员技术交流社区

标题: 关于二进制的问题 [打印本页]

作者: 蒋安国    时间: 2012-3-24 20:37
标题: 关于二进制的问题
定义一个long型的变量a,值为0x8fffffff,显示结果是前32位显示1,后32位的最高四位是1000,剩下的位都是1,我的问题是:为什么前32位不是0而是1,因为我定义的是正数啊,前面应该是0的,又没有超出范围,搞不懂啊,请那位大虾帮帮我。
作者: 梁锡伟    时间: 2012-3-25 00:07
不是10001111111111111111111111......吗?搞不懂你说的。。我用pc科学计算器查转换的数
作者: 贠(yun)靖    时间: 2012-3-25 05:30
因为数字默认是int类型的,定义成long型,就自动类型提升了,而提升成六十四位的,至于提升的前三十二位补零还是一,是根据最高位而定的。就记得这么多,以前学汇编的时候学过!
作者: 邓飞飞    时间: 2012-3-25 05:54
本帖最后由 邓飞飞 于 2012-3-25 05:55 编辑

根据十六进制转换成二进制的方法:十六进制的一位变成二进制的四位
           8          F              F           F          F            F           F           F     
(1000)(1111)(1111)(1111)(1111)(1111)(1111)(1111)

long类型的数据在内存中占六十四位,而恰好该数据的占满六十四位,最高位的1是有效的数字位,并不是符号位。
作者: 马强    时间: 2012-3-25 11:08
定义的正数是多少?
作者: 黑马老兵    时间: 2012-3-25 12:32
值得思考关注中……
作者: 蒋安国    时间: 2012-3-25 17:45
因为数字默认是int类型的,定义成long型,就自动类型提升了,而提升成六十四位的,至于提升的前三十二位补零还是一,是根据最高位而定的。就记得这么多,以前学汇编的时候学过!

哥们分析的对啊,我忘了给0x8fffffff后面加l了,导致类型提升了,加上后就显示10001111111111111111111111111111了,真是太大意了。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2