首页 > 解决方案 > 我得到 b 的值为 2130 谁能解释我的过程并告诉我为什么?

问题描述

公共类主要{

public static void main(String[] args) {
   byte x = 126;
    short y = 32734;
    int z = 32789;
    long a = 50000L + 10L * (x + y + z);
    System.out.println(a);

    short b = (short) (1000 + 10 * (x + y + z));
    System.out.println(b);
}

}

输出:706490 2130 为什么我得到 b = 2130?

标签: javatypesintegerlong-integershort

解决方案


以下是一些事实,您可以从中得出答案:

  • short是一个 16 位有符号整数类型,具有最大值32767
  • 如果因缩小强制转换而溢出,则会发生整数截断
  • 1000 + 10 * (126 + 32734 + 32789)657490
  • 657490 % 327682130

推荐阅读