首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java原语是如何工作的?,short(short+ int)?

java原语是如何工作的?,short(short+ int)?
EN

Stack Overflow用户
提问于 2012-12-30 16:11:52
回答 8查看 956关注 0票数 1

我尝试执行以下代码:

代码语言:javascript
复制
public class Test5 {

/**
 * @param args
 */
public static void main(String[] args) {
    short x = 0;
    int i = 123456;


    x = (short) (x + i);
    System.out.println(x);
}

}

输出"-7616“是怎样的?当类型强制转换为short时,integer和short如何工作?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-12-30 16:22:14

当您将int和short相加时,resut是一个int,它是4个字节。

但是当你把它转换成一个短整型时,你就是从整型的最后两个字节做了一个短整型。

123456的字节是0x0 0x1 0xe2 0x40,所以你可以从0xe2 0x40中截取一个短字节。

0xe2的第一位是1,结果短值为负。

你可以使用这个简短的程序来看看会发生什么:

代码语言:javascript
复制
int i = 123456; // <== change the value
System.out.format("Bytes of %d: ", i);
byte[] bytes = ByteBuffer.allocate(4).putInt(i).array();
for (byte b : bytes) {
   System.out.format("0x%x ", b);
}
System.out.format("\nlast two bytes : %d*256 + %d = %d\n", bytes[2], bytes[3], (short)(bytes[2]*256 + bytes[3]));

输出:

代码语言:javascript
复制
Bytes of 123456: 0x0 0x1 0xe2 0x40 
Last two bytes : -30*256 + 64 = -7616
票数 1
EN

Stack Overflow用户

发布于 2012-12-30 16:21:30

长版本:http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html

简写版本: Java获取int的16个最低有效位,并以相同的顺序将它们放入短位。

票数 3
EN

Stack Overflow用户

发布于 2012-12-30 16:18:46

short是2字节整数。java类型不能像在C中那样是“无符号的”。所以,最大值是32767。(Short.MAX_VALUE)。

如您所见,您尝试将更大的值赋给此变量:

代码语言:javascript
复制
123456
 32767

这样的值的二进制表示是您发布的负值。顺便说一句,同样的事情也发生在C中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14089269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档