microsoftvisualc++如何存储有符号字符以及如何测试有符号字符中的单个位



好的,假设我有一个值为-103的有符号字符:

char s_char = -103;

计算机如何以位存储这个字符?第一个位是0是因为char是负的吗?如果是这样,计算机是否会将该字符存储为01100101,因为1100101(以2为基数)以10为基数是103?

第二个问题:我如何访问或测试有符号字符中的单个位?将

s_char & (0x80 >> pos)

给我位从左开始计数的位置的值?

char只是一个整数。大多数情况下为8位整数。所以-103 =

10011001

要访问char中的单个位,您可以像访问任何其他整数一样:

char s_char = -103;
s_char & (1 << n)

将获得从底部开始的第n位。

有符号值通常使用二进制补码存储。http://en.wikipedia.org/wiki/Two%27s_complement

这实际上提供了一个带符号的位,它决定存储的数字是负数还是正数。例如,如果您使用的是8位整型,则可能的有符号数范围是-128到127。例如,它分解为一系列8位,其中最左边的位表示值-128。后面的位作为左边的位保留一半的值,但却是正数。二进制形式的8位数字看起来像这样:

0    0    0    0    0    0    0    0
-128 64   32   16   8    4    2    1

由于char是一个整数类型,因此它将以与常规int相同的方式存储。值为-103的char将分解为如下内容:

1    0    0    1    1    0    0    1
-128 64   32   16   8    4    2    1

如果你想测试单个比特,你可以使用掩码。例如,如果您想测试最左边的位是否设置了,您可以这样做:

s_char & (0x80)

如果s_char中最左边的位被设置为1,则返回true,而不考虑其他位。我希望这对你有帮助!

最新更新