我尝试将248转换为二进制,然后将其转换为两种恭维,最后将其转换为十进制。
问题:结果是8而不是-8

发布于 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 );。
代码示例:
int x = 248; //# your input value from reading
int result = (-256) | ( x );
System.out.println("value is " + result ); //# gives: value is -8https://stackoverflow.com/questions/70667293
复制相似问题