microsoftvisualc++如何存储有符号字符以及如何测试有符号字符中的单个位
How does Microsoft Visual C++ store signed chars and how can I test individual bits in a signed char?
好的,假设我有一个值为-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,而不考虑其他位。我希望这对你有帮助!
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 将超出范围的整数分配给有符号字符类型
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 库特无符号字符
- 寻找一种更好的方法来表示无符号字符数组
- C++ 无符号字符 *{varName};-> C#
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 首先按给定顺序打印所有数字,然后使用 Array 打印所有字符和其他符号
- 将浮点数转换为无符号字符数组并打印出来
- 在函数中返回无符号字符数组,但不返回指针
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如何将字符符号作为动作数学的字符
- 我能把字符符号转换成字符串吗