问两个Java基础题,希望给出解释

怎么说也用了一年多的Java语言了,最近看到的两段代码怎么就看不懂呢.第一题:加注释那些结果是怎么算出来的?希望用二进制方式解释一下.publicstaticvoidte... 怎么说也用了一年多的Java语言了,最近看到的两段代码怎么就看不懂呢.

第一题:加注释那些结果是怎么算出来的?希望用二进制方式解释一下.
public static void test1(){
int n=7;
n<<=3;
System.out.println(n&n+1|n);//结果是56
System.out.println(n&n+1|n+2^n);//结果是58
System.out.println(n&n+1|n+2^n+3);//结果是57
System.out.println((n&n)+(1|n)+(2^n));//结果是171

n=n&n+1|n+2^n+3;
n>>=2;
System.out.println(n);
}

第二题:b1|b2&b3^b4这段代码执行的顺序应该是(b1|(b2&b3))^b4,其中&和|运算我还知道点,应该是不短路的逻辑运算,可boolean对boolean进行^运行是什么意思?
public static void test2(){
int x=0;
boolean b1,b2,b3,b4;
b1=b2=b3=b4=true;
//以下代码boolean对boolean进行^运行是什么意思?
x=(b1|b2&b3^b4)?x++:--x;

System.out.println(x);
}

先谢过了!
展开
 我来答
Rucky浪
2010-11-14 · TA获得超过124个赞
知道答主
回答量:56
采纳率:0%
帮助的人:70.6万
展开全部
第一题:
n<<=3;
是指将n对应的二进制进行左移3位的位运算
即原来n的二进制是0111,进行运算后为0111000,对应的十进制是56

第一个运算是指n先于n+1进行二进制与运算,然后与n进行二进制位或运算
即0111000&0111001|0111000 最后的结果还是0111000 也就是56

第二个运算是指(n先于n+1进行与运算),然后与(n+2与n进行二进制位异或运算的结果)进行二进制位或运算,
即(0111000&0111001)|(0111010^0111000 )
也就是0111000|(0111010^0111000)
异或运算:a^b = a&!b + !a&b 也就是a与b异或等于a与上b的非 + a的非与上b
那么0111010^0111000 = 0111010&1000111 + 1000101&0111000 = 0000010
所以最后的结果为0111010 即十进制58

第三个运算是指(n先于n+1进行与运算),然后与(n+2与n+3进行二进制位异或运算的结果)进行二进制位或运算,
即(0111000&0111001)|(0111010^0111011 )
也就是0111000|(0111010^0111000)
异或运算:a^b = a&!b + !a&b 也就是a与b异或等于a与上b的非 + a的非与上b
那么0111010^0111000 = 0111010&1000111 + 1000101&0111000 = 0000001
所以最后的结果为0111001 即十进制57

最后一个运算是指:n先与n进行二进制位与运算,结果还是n,1与n进行二进制位或运算,那么就是0000001|0111000,结果是0111001,
2^n = 0000010^0111000 = 0000010&1000111 + 1111101&0111000 = 0111010
所以(n&n)+(1|n)+(2^n) = 0111000 + 0111001 + 0111010 = 10101011
也就是十进制171

第二题:
应该是相当于对1和0进行位运算吧
i178269245
2010-11-14 · TA获得超过185个赞
知道小有建树答主
回答量:180
采纳率:0%
帮助的人:114万
展开全部
俩道题其实一样,你应该是没弄清楚运算符的优先级,
这里面有加减乘除,三元运算符,自加自减, 位运算
这几者的优先顺序:
自加自减,加减乘除,然后是位运算,三元运算符最低。
^这个符号是异或运算
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tk547514
2010-11-14 · 超过21用户采纳过TA的回答
知道答主
回答量:82
采纳率:0%
帮助的人:63.3万
展开全部
1&1=1 1&0=0 0&1=0 0&0=0

1|1=1 1|0=1 0|1=1 0|0=0

1^1=0 1^0=1 0^1=1 0^0=0

>>n 除以2^n
<<n 乘上2^n

-1>>n =-1

true&true=true true&false=false false&true=false false&false=false

true|true=true true|false=true false|true=true false|false=false

true^true=false true^false=true false^true=true false^false=false
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ghogel
2010-11-14 · TA获得超过1388个赞
知道小有建树答主
回答量:1119
采纳率:33%
帮助的人:460万
展开全部
位运算啊!

你搜一下google就有了。

这个东西平时用的少。是不容易记住
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式