我很难把int,short,short装进long.

以下是我目前掌握的情况:

int p = 123456;
short x = -567;
short y = 789;

long l = (((long) p) << 32) | (x & 0xffff0000L) | (y & 0x0000ffffL);

int p2 = (int) (l >> 32);
short x2 = (short) (l >> 48);
short y2 = (short) l;

p=123456, p2=123456
x=-567, x2=1        // bad result
y=789, y2=789

中间值不正确.我怎么才能解决这个问题呢?

推荐答案

你需要把x换掉:把(x & 0xffff0000L)换成((x & 0x0000ffffL) << 16).

然后,您需要修复移位以检索它:short x2 = (short) (l >> 16).

Java相关问答推荐

JPackage-results已安装-如何添加系统属性?

为什么接口中的主函数而不是类中的主函数在Java 17中编译和运行没有问题?

CriteriaQuery with max

空手道比赛条件

强制Mockito返回null而不是emtpy list

为什么一个java函数会返回一个作为参数传递给它的对象?

无法传递消费者<;>;实例

Hibernate 6支持Joda DateTime吗?

R.id.main给我一个红色错误,无法解析MainActivity.java中的符号main

具有多种令牌类型和段的复杂Java 17正则表达式

使用传递的参数构造异常的Mockito-doThrow(或thenThrow)

如何正确创建序列图?

声明MessageChannel Bean的首选方式

有谁能帮我修一下这个吗?使输出变得更加整洁

FETCH类型设置为LAZY,但它仍会发送第二个请求

在应用getCellFormula()时,Excel引用中的文件名始终为";[1]";使用Apache POI()

如何调整JButton的大小以适应图标?

为什么项目名称出现在我的GET请求中?

如何在Spring Boot中为不同的部署环境管理多个.properties文件?

如何设置默认序列生成器分配大小