A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 明锦添 中级黑马   /  2013-3-13 23:26  /  1529 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄玉昆 于 2013-3-16 07:14 编辑

package com.soft.test;


public class Test3 {

        public static void main(String[] args) {
                int i = 1;
                int number = i << 100;
                System.out.println(number);
        }
}

得到的number竟然是16,不知道为什么。。{:soso_e132:}

点评

如果问题已经解决了,请将分类改为已解决;一定要对别人的回答有相应的回复哦,谢谢  发表于 2013-3-15 08:34

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

9 个回复

倒序浏览
int 数据最高值为2的31次方-1,你这个应该是越界造成
回复 使用道具 举报
int类型是32位的,它只会移动32位以内的位数吧,
所以取一下余数,就是左移4位了,猜的,不知道是不是这么回事
大家给点意见哈

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
int只有32位 00000000  00000000  00000000  000000001移动一百次,32轮了三圈,然后落到第四个 32*3+4=100,所以就是16了。
回复 使用道具 举报
int的取值范围是-2147483648~2147483647
1<<100这可是一个天文数字,数字越界。
0~ 31
32~ 63
64~ 95
96~100
值越界后会重新从头开始,也就是以32为长度的循环,i>>1与i>>33值都是一样的

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
楼上正解
a、<<左移,最底位补什么由原有数据的最底位而定
b、>>右移,最高位补什么由原有数据的最高们值而定
回复 使用道具 举报
孙宁 中级黑马 2013-3-13 23:51:21
7#
在张孝祥老师的书上曾经提过,对于int整形移位a<<b位,系统会先将b对32取模,得到的结果才是真正移的位数。100对32取余得4,  1左移四位结果就是16

点评

受教了  发表于 2013-3-14 10:59
嗯,懂了。3q  发表于 2013-3-14 00:15

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
Int数据类型是32位,你定义int i=1,就是0000-0000 0000-0000 0000-0000 0000-0001 左移100位,相当于乘以2的100次幂,应该越界报错吧
回复 使用道具 举报
小路飞 来自手机 中级黑马 2013-3-14 01:04:16
9#
烟磊磊 发表于 2013-3-13 23:41
int只有32位 00000000  00000000  00000000  000000001移动一百次,32轮了三圈,然后落到第四个 32*3+4=100 ...

是循环移位的缘故啊!
回复 使用道具 举报
小知识点  我也知道了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马