java - 我得到 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?
解决方案
以下是一些事实,您可以从中得出答案:
short
是一个 16 位有符号整数类型,具有最大值32767
- 如果因缩小强制转换而溢出,则会发生整数截断
1000 + 10 * (126 + 32734 + 32789)
是657490
657490 % 32768
是2130
推荐阅读
- django - Django 2.1.4 - 过滤器 - 为什么我的过滤器没有捕捉到指定的年份?
- android - 横向视图上的 Android 片段滚动视图
- javascript - D3js 获取键数组以从 json 中绘制图表
- jquery - 我希望在移动视图中打开时以全屏模式显示
- css - 推迟未使用的 CSS、Page Speed 洞察、recaptcha
- php - 如何使用 CURL 将帖子数据发送到 laravel 中的 mailchimp
- ios - 来自服务器 url 的拇指图像
- lua - source_file.lua:1:尝试调用一个 nil 值(全局“RegisterServerEvent”)
- android - 如何在服务中使用上下文?
- php - 我将如何使用 WPbakery 将此代码实施到我的 Wordpress 网站中