首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将十六进制转换为十进制,从java (0xF8 )中签名的2的补码转换为-8)

将十六进制转换为十进制,从java (0xF8 )中签名的2的补码转换为-8)
EN

Stack Overflow用户
提问于 2022-01-11 13:03:07
回答 1查看 436关注 0票数 -1

我尝试将248转换为二进制,然后将其转换为两种恭维,最后将其转换为十进制。

问题:结果是8而不是-8

EN

回答 1

Stack Overflow用户

发布于 2022-01-14 11:57:28

Java特别将单个字节保存在-128 to 127的min/max范围内。

248 (十六进制:0xF8)这样的值在中已经存储为短 (2字节或16位)。

[0000 0000] [1111 1000] = 248但你只需要[1111 1000]-8

你可能会想,“如果我删除启动字节[0000 0000],那么它就能工作.??”不,因为现在只剩下一个字节了,仅使用[1111 1000]的剩余字节不能使248成为,因为单个字节的最大值是127

溶液

在那些可用的16位中,用1替换所有导致值的位。

视觉上您的位[0000 0000] [1111 1000] = 248必须变成[1111 1111] [1111 1000] = -8

实现这一结果的一个快速方法是通过这个逻辑result = (-256) | ( x );

代码示例:

代码语言:javascript
复制
int x = 248; //# your input value from reading

int result = (-256) | ( x );

System.out.println("value is " + result ); //# gives: value is -8
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70667293

复制
相关文章

相似问题

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