黑马程序员技术交流社区
标题: 移位操作当中的类型转换,表示看不懂啊 [打印本页]
作者: 赵崇友 时间: 2013-3-29 16:32
标题: 移位操作当中的类型转换,表示看不懂啊
本帖最后由 赵崇友 于 2013-3-30 16:59 编辑
“如果对char 、byte或者、short类型的数值进行移位处理,那么在移位进行前,它们会被转换为int类型,并且得到的结果也是int型的值。只有数值右端的低5位才有用。这样可以防止我们移位超过int型值所具有的位数。若对long类型进行处理,最后得到的结果也是long型值,此时只会用到数值右端的低6位。”这句话如何理解啊?低5位和低6位有什么用?
作者: 刘胜寒 时间: 2013-3-29 17:40
晕死了||居然看不懂
char,byte,short分别是8位,8位,16位。但是我没看懂楼主,你要为何般??java疯狂讲义第二版第三章第七节有详细介绍。
作者: 赵崇友 时间: 2013-3-29 17:53
似水像火 发表于 2013-3-29 17:40
晕死了||居然看不懂
char,byte,short分别是8位,8位,16位。但是我没看懂楼主,你要为何般??java疯狂讲义 ...
只有数值右端的低5位才有用。这样可以防止我们移位超过int型值所具有的位数
这句的理解
作者: 刘胜寒 时间: 2013-3-29 18:01
int类型是32位也就是2的5次幂
如果你移32位以上,那么原来的数的信息会全部丢失,这样也就没有什么意义了
作者: 赵崇友 时间: 2013-3-29 18:10
似水像火 发表于 2013-3-29 18:01
int类型是32位也就是2的5次幂
如果你移32位以上,那么原来的数的信息会全部丢失,这样也就没有什么意义了 ...
就是说低5位是右移的位数的二进制位数?
比如:2>>4 4的二进制0000 0000 0000 0000 0000 0000 0000 0100
那低五位是00100 是这个意思嘛?
如果右移的二进制超过了五位就超出了int型的位数,也就没有意义了!!
不知道我这样理解对嘛!!!
作者: 刘胜寒 时间: 2013-3-29 18:11
要这么理解,加入给你一个整数n,然后执行n<<m,而那个低于五位是对m来说的,因为2的5次方是32,一个数左移32也就没意义了。
至于long型,2的6次方是64,左移64位也没意义了。
int a=11;
System.out.println(Integer.toBinaryString(a));
System.out.println(a);
System.out.println(Integer.toBinaryString(a<<33));
System.out.println(a<<33);
作者: 赵崇友 时间: 2013-3-29 18:21
似水像火 发表于 2013-3-29 18:11
要这么理解,加入给你一个整数n,然后执行n
哦哦 多谢了 我明白了!!我的移位符写反了!!!原来如此……书上写的有点让人误解。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |