2 xiaolingzinia xiaolingzinia 于 2016.02.26 14:52 提问

java紧急求助,谢谢各位 1C

package com.houlibao.www;

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 */

}

}
http://ask.csdn.net/questions?type=reward#
为什么一个是59,一个是56?怎么算出来的的

9个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.26 21:11

这些都是计算机基础的几种运算,<<左移位运算,&按位与,|按位或,^异或。了解这些操作的基础知识,就不难理解运行结果了。
他们优先级是:先算术运算,后移位运算,最后位运算,从高到底依次是&,^,|。
此外,表达式的结合次序取决于表达式中各种运算符的优先级,优先级高的运算符先结合,优先级低的运算符后结合。所以最后一句话等价于:

 n = n & (n + n) | (1 + 2 ^ n + 3);

括号()优先级最高。

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.02.26 21:14

修正下,最后一个括号里面的运算,结合顺序是,算术运算优先进行,然后才是位运算。等价如下操作:

 n = n & (n + n) | ((1 + 2) ^( n + 3));
u012427018
u012427018   2016.02.26 16:10

你去看看java操作符的优先级

u012427018
u012427018   2016.02.26 16:17

优先级顺序 + 大于 & 大于 ^ 大于 |

Royal_lr
Royal_lr   Ds   Rxr 2016.02.26 16:39

去看下这个怎么操作的就知道了,,

xionglangs
xionglangs   Rxr 2016.02.26 17:19

图片说明,我运行的2个结果都是56。<< 和<<= 都是位移运算符,但<<是进行位移运算,<<=是进行位移运算后把值赋给原来的值,比如这里的n
7<<3也就是二进制运算00000000 000000000000000000000111 7=2^(3-1)+2^(2-1)+2^(1-1),0就不用算右移3位变成了00000000000000000000000000111000,运算得56,再把56赋值给n,所以打印出来的就是56。
至于这些在这里打印的应该是二进制&就是同时为1才能为1,其余都为0,|就是同时为0才能为0,其余的都为1,^这个是异运算符,(1^1=0,0^0=0,1^0=1,0^1=0)
System.out.println(Integer.toBinaryString(00000000000000000000000000111000&00000000000000000000000000111000));/* 111000 /
这里的二进制码就没有变00000000000000000000000000111000
System.out.println(Integer.toBinaryString(00000000000000000000000000111000|00000000000000000000000000000001));/
111001 /
这里的二进制码就是00000000000000000000000000111001
System.out.println(Integer.toBinaryString(00000000000000000000000000000010^00000000000000000000000000111000));/
111010 */
这里的二进制码就是00000000000000000000000000111010
至于前面的0省略了。
n = n&n + n|1 + 2^n +3
这一步,我就不知道了,我感觉是先优先级位移加法运算,在进行赋值,但他的值竟然没变,可能编译器不认为这个=号是复制运算吧,所以值没有变。

Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.26 17:26

你可以先手动算算,然后你就明白了原理

shanxianyue1
shanxianyue1   2016.02.27 18:16

运算符优先级的问题,就像楼上说的那样

shallynever
shallynever   2016.02.27 23:48

就是考察运算符优先级的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
明天是我的生日,谢谢大家捧场
明天是我的生日,谢谢大家捧场
求助各位高手,帮忙做下,谢谢了
由计算机“想”一个四位数,请人猜出这个四位数是多少。人输入四位数字后,计算机首先判断这四位数字有几位是猜对了,并且在对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数是多少时为止。 
鸡蛋灌饼
今天晚上出去跑步,回来的时候已经11:20了,看到三教后面拆迁区卖鸡蛋灌饼的正在收拾家当,我对老胡说:“挣钱不容易啊,起早贪黑的!”老胡却说:“在学校,卖鸡蛋灌饼的比老师挣钱多!”还根据地上一堆蛋壳给我算了一笔帐,一天少说也得挣二三百块钱。我就想了,要是只是为了挣钱,卖鸡蛋灌饼也不错啊,难怪有清华毕业卖猪肉的。看来,还得抓点紧,在学校里预定一个铺面,要是哪天混不下去了,就卖灌饼,就冲着我这双握了十
ios 使用xcode调试代码的时候进入断点显示变量全是nil,但NSLog输出那个变量却是有值的
ios 使用xcode调试代码的时候进入断点显示变量全是nil,但NSLog输出那个变量却是有值的
MiPhone20160401_64
MiPhone20160401_64 华为 小米 线刷工具
求助,紧急求助
<br />我用的是windows server 2008系统,为什么配置上IIS(7.0),就是无法浏览.asp页面<br />请各位大侠帮助,谢谢!
求助!!!紧急求助
各位大神,谁会用c#语言编写下面的题目 多道程序缓冲区协同操作 设自行车生产线上有3只箱子(BOX),箱中有N个位置(N>=2),BOX1每个位置可存放下一个车架,BOX2每个位置可存放一个车轮,BOX3每个位置可存放下一台组装好的车。设有3个(类)工人,工人1不断地向箱1中放车架,工人2不断地向箱2中放车轮,工人3不断地从箱中1取出一个车架和箱2中取2个轮子,组装成一台自行车,并把它放到
紧急求助~~!!!
刚刚学了Java一个学期,刚刚对Java稍稍了解,老师就让我们完成一个课程设计题目。虽然应该可以编出来,但我现在真的没有什么思路,所以,紧急求助高手指点一二,帮帮在下吧,一个星期的时间就得上交了,先谢谢高手大家了。。。O(∩_∩)O~课设的题目是这样的:                       课程设计题目:编写图形用户界面(含菜单和工具条),可并发控制两个机器人,分别按宽
紧急求助?
请问各位大虾, 我在打开加密文件时出现“解密错误”是怎么回事?怎样解决?我使用的是“高强度文件夹加密大师”,哪位知道请一定告知,多谢多谢!!
紧急求助
在这个页面里的下载链接不好用了,哪个好心的人能给帮个忙帮我下载一下,我的邮箱是67566003@qq.com,在此,小弟表示万分的感谢。 http://download.csdn.net/download/dingymm/3720915 这个是“sqlite3 C# ADO.net初学者例子 实现增删改查”的一个例子。看下边的图已经登陆了就是不好使。