我有一个问题,曾经有一个像这样的主题Link,但我无法真正理解代码行binary.append((val & 128) == 0 ? 0 : 1);
谁能向我解释到底是怎么回事?
答案 0 :(得分:2)
128是10000000并且&是位和运算符-val中除第8位以外的所有内容都将被清零,因此您可以有效地获取数字的第8位,因此对于val
就像01111111
01111111
& 10000000
--------
00000000
,该行将返回0
答案 1 :(得分:1)
这是一个位掩码,其形式为数字128,十六进制0x80或二进制形式10000000。&
是按位与运算。
在该问题中使用此位掩码的原因非常简单-它采用most significant bit并确定它是0还是1,然后将其用于构建字符的二进制表示形式。
选择128的原因-char
是具有128个可能值的整数值,因此在此屏蔽其最大值是确保如何获得值的每个 位。 / p>
答案 2 :(得分:0)
128的二进制是1000 0000。 该段代码将val的第8位的值添加到对象二进制文件中。 (AND功能将第8位以外的所有其他位都清零。)