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;这句话是什么意思嘛!
高手帮忙啊!
解决方案 »
- 关于eclipes程序的运行问题
- 使用LINUX+Tomcat的请进,如何在图片里显示中文?
- 关于JTree 的问题!
- 請問:如何判斷一字符串在一個文本中是否存在?
- 在命令行下面运行*.java 老是跑出Jbuilder怎么办?
- 请问:为什么我写的applet 程序用appletviewer 可以运行,但用IE就是不行,java控制台有提示...
- 做过邮件系统的朋友来救救我啊...特急!!!!!!!!!!!!!!!!!!!!
- 关于科技日软件问题向大家道歉!!!
- 安装好weblogic6.1之后,为何lib中没有weblogic_sp.jar???
- 菜菜菜鸟的疑惑
- 帮忙看个程序!
- 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 }}