gpt4 book ai didi

java - C 和 Java 对十六进制值的按位运算不匹配

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:07 25 4
gpt4 key购买 nike

我在 C 代码中有以下行声称可以将带符号的 int8 转换为无符号的 int16。

float x = (float) (((int16_t) ((temp[0] <<8) & 0xff00) | (temp[1] & 0x00ff)));

我将其转换为 Java 为

float x = (((temp[0] << 8) & 0xff00) | (temp[1] & 0x00ff));

对于相同的输入数组,

temp[] = {0xFC, 0x10}

x= -1008 // In C
x= 64528 // In Java

我在 SO 和谷歌上提到了关于此的各种帖子,但无法确定缺少什么。

尝试了其他数据类型 short、int、float 等但无济于事

我们如何在 java 中获得相同的 -1008 值?请帮忙。

提前致谢

最佳答案

在 C 中,您有一个额外的转换:(int16_t)。如果您在 Java 中执行相同的操作 - (short),您将获得相同的结果。

问题在于,在 C 和 Java 中,临时结果至少被强制转换为 int(或可以保存该值的更高类型)。通过强制转换为 int16_tshort,您可以强制编译器再次丢失高位。

关于java - C 和 Java 对十六进制值的按位运算不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35698461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com