执行语句"int a=12;a+=a-=a*a;"后a的值是多少,为什么

 我来答
奋力的拼搏
2018-06-08 · 超过53用户采纳过TA的回答
知道小有建树答主
回答量:125
采纳率:100%
帮助的人:53.5万
展开全部

这是哪个试卷上面的题目吧,哈哈哈,做项目的时候用这种表达式要被骂死的,项目中表达模糊的时候要加上括号

分割线——————————————————————————————

2018年6月8日16:12:40

编译前(.java文件):

public class Test implements Serializable {
   public static void main(String[] args) {
      int a = 12;
      a += a -= a * a;
      System.out.println(a);
   }
}

编译后(.class文件):

public static void main(String[] args) {
    int a = 12;
    int a = a + (a = a - a * a);
    System.out.println(a);
}

javap 查看字节码:

 public static void main(java.lang.String[]);
    descriptor: ([Ljava/lang/String;)V
    flags: ACC_PUBLIC, ACC_STATIC
    Code:
      stack=4, locals=2, args_size=1
         0: bipush 12 // 常量int类型的12入栈(当int取值-1~5采用iconst指令,取值-128~127采用bipush指令,取值-32768~32767采用sipush指令,取值-2147483648~2147483647采用 ldc 指令。)
         2: istore_1    // 弹出栈顶元素12存入位置1的局部变量中 
         3: iload_1     // 从位置为1的局部变量中取出元素int类型的12压入栈
         4: iload_1     // 从位置为1的局部变量中取出元素int类型的12压入栈
         5: iload_1     // 从位置为1的局部变量中取出元素int类型的12压入栈
         6: iload_1     // 从位置为1的局部变量中取出元素int类型的12压入栈
         7: imul        // 执行int类型的乘法
         8: isub        // 执行int类型的减法
         9: dup       // 复制栈顶的值(-132)压入栈顶,操作结束时栈内-132,-132,12
        10: istore_1          // 弹出栈顶的值(-132)赋值给变量a,操作结束时栈内 -132,12
        11: iadd              // 栈值相加,结果压入栈。操作结束时栈内 -120
        12: istore_1          // 关键在这里,将栈顶的值 -120 弹出赋值给变量a,所以计算结束后a的值是-120
        13: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
        16: iload_1
        17: invokevirtual #3                  // Method java/io/PrintStream.println:(I)V
        20: return
      LineNumberTable:
        line 13: 0
        line 14: 3
        line 15: 13
        line 16: 20
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      21     0  args   [Ljava/lang/String;
            3      18     1     a   I
}

具体过程,看后面备注

分割线————————————————

2018年6月8日17:55:37

上面的操作结果和解释都是java的,才发现问题问的是Pascal的,可能结果会不一样

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式