public class Test{static void leftshift(int i,int j){i<<=j;}public staic void main(String args[]){ int i=4,j=2; leftshift(i,j); System.out.println(i);}}
输出i为什么是4??
不明白啊!
i<<=j;这句话是什么意思嘛!
高手帮忙啊!
输出i为什么是4??
不明白啊!
i<<=j;这句话是什么意思嘛!
高手帮忙啊!
解决方案 »
- java线程同步问题
- 跪求各位高手帮助:如果用JSP开发网站,想调用matlab的工具箱,这个可行吗?
- mysql驱动问题 请高手指点
- 关于公司员工记录的问题?
- 求jcreator pro3.5 能用的注册码
- 请教有关java web start读取xml文件的问题
- #########关于String和StringBuffer,知道的人进来###########
- 在线等待,急……用java打印,纸张右半边为何打印不出来
- JFrame下鼠标指针Cursor的问题!!!!!!!
- 怎样把变量代进SQL语句
- 帮忙看个程序!
- java.lang.NumberFormatException: For input string: " 1" 如何解决
1,基本类型,传递的是这个基本类型的副本,不会改变被传递参数的值
2,引用类型,传递这个对象的引用,可以改变这个引用所指向的值。i<<j 是移位操作里的左移操作,将i的二进制表示向左移动j个位
比如
int i=4,j=2
二进制表示 00000000 00000000 00000000 00000100
i<<j
结果 00000000 00000000 00000000 00010000 =16 相当于 4*2^2=16
i < <=j ----> i = i<<j
中,i,j的生命周期在你调用完这个方法就结束了
LZ根本就不用考虑leftshift方法
虽然你调用的时候传了i,j的值过去
但是这个时候其实是传了一个副本过去
也就是说i的值只在leftshift方法里发生变化
这个方法又没有返回值
所以并不影响main方法里的i,j的值
如果lz还不太清楚地话,可以去网上看一下[变量作用域]的相关概念再说i < <=j
这个是个移位操作
就是说把i向左移动j位后的值再赋给i
就相当于i = i<<j;
运算的道理和
i+=2一样关于移位运算,参考下面的例子public class Test3 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 4, j=2;
System.out.println("before i:"+Integer.toBinaryString(i)); //before i:100
System.out.println("before j:"+Integer.toBinaryString(j)); //before j:10
i<<=j; // 相当于i = i<<j;
System.out.println("after i:"+Integer.toBinaryString(i)); //after i:10000
System.out.println("after j:"+Integer.toBinaryString(j)); //after j:10 }}