public class TestExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
int n = 7;/* 00000111 */
n <<= 3;
System.out.println(n); /* 111000 */
System.out.println(Integer.toBinaryString(n&n));/* 111000 */
System.out.println(Integer.toBinaryString(n|1));/* 111001 */
System.out.println(Integer.toBinaryString(2^n));/* 111010 */
// n = n&n + n|1 + 2^n ; /* 59 111011 */
n = n&n + n|1 + 2^n +3 ; /* 56 111000 */
System.out.println(n); /* 56 111000 */
}
}
为什么一个是59,一个是56?怎么算出来的的
这些都是计算机基础的几种运算,<<左移位运算,&按位与,|按位或,^异或。了解这些操作的基础知识,就不难理解运行结果了。
他们优先级是:先算术运算,后移位运算,最后位运算,从高到底依次是&,^,|。
此外,表达式的结合次序取决于表达式中各种运算符的优先级,优先级高的运算符先结合,优先级低的运算符后结合。所以最后一句话等价于: n = n & (n + n) | (1 + 2 ^ n + 3);
括号()优先级最高。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。