|
|
1
18
为了获得负数的二进制表示形式,需要计算2的补码:
举个例子-72:
因此-72的二进制(8位)表示是
实际发生在您身上的是:您的文件有一个带值的字节
在Java中,当这个字节用作int时(例如,因为
通过安定
|
|
|
2
2
负数的二进制表示是对应的正数位的二进制表示,加上1。此表示称为 two's complement . |
|
|
3
1
我猜这里的神奇之处在于,字节存储在一个更大的容器中,很可能是一个32位int。如果字节被解释为一个带符号的字节,它将被扩展为表示32位int中的相同数字,也就是说,如果字节中最重要的位(第一个位)是1,那么在32位int中,该1中剩下的所有位也都是1。ed到1(这是由于负数的表示方式,即2的补码)。
现在,如果你
|
|
|
4
1
不确定您真正想要什么:)我假设您正在询问如何提取带符号的多字节值?首先,看看当您对单个字节进行符号扩展时会发生什么:
因此,符号正确地扩展到32位,而不做任何特殊的事情。字节1000 0000正确扩展到1111 1111 1111 1111 1111 1111 1000 0000。 您已经知道如何通过使用0xff禁止符号扩展-对于多字节值,您只希望最重要字节的符号是extendet,并且希望将不太重要的字节视为无符号(例如假定网络字节顺序,16位int值):
除了最重要的字节外,您需要禁止每个字节的符号扩展,以便将有符号的32位int提取为64位长:
注意:在基于Intel的系统上,字节通常以相反的顺序存储(最低有效字节优先),因为x86体系结构将较大的实体按此顺序存储在内存中。许多源于x86的软件也在文件格式中使用它。 |
|
|
5
0
要获取无符号字节值,您也可以。
或
|
|
|
6
0
对于设置了位7的字节:
用字节计算时,用数学方法计算模256。有符号和无符号的区别在于,为等价类选择不同的表示,而作为位模式的底层表示对于每个等价类保持不变。这也解释了为什么加法、减法和乘法的结果与位模式相同,而不管是用有符号整数还是无符号整数计算。 |
|
|
ralphcom · Modbus请求的字节顺序 1 年前 |
|
LemosLover · c中的XOR字节# 1 年前 |
|
|
Chaos · 如何规避/扩展kotlin应用程序的65535字节限制 2 年前 |
|
|
Coldchain9 · 确定果朗CSV行中的字节数 2 年前 |
|
|
5125 · 如何以正确的方式清除字节缓冲区 2 年前 |
|
|
Meniev · std::向量的元素是否单独存储在存储器-C++中? 2 年前 |
|
|
Veronica · Java文件上载:图像无法显示,因为它包含错误 2 年前 |
|
|
Runsva · 将字节数组转换为浮点的正确方法?(阿杜伊诺) 3 年前 |