从 8 位值中获取最高有效位
Get the most significant bit from an 8-bit value
我知道这个网站上有类似的问题,但是,我似乎找不到真正帮助我解决我遇到的问题的东西。
迄今:
我有 1 字节(8 位),可以是 1 和 0 的任意组合。
例如:11000010是我的数据字节。(小端序)
我需要做的是确定最高有效位 (MSB),在本例中为 11,是否为 00、01、10、11,然后从那里做一些其他事情。
到目前为止,我已经让程序将 Byte 输出为 11000010(存储在字符串中),并尝试从中提取 11。 (如果我能弄清楚,那么创建一个开关大小写或 if 语句来检查我自己的内容是否足够简单)。
**我对C++不太好,这就是我寻求帮助的原因。
任何帮助将不胜感激。
您不需要将其存储为字符串,只需使用按位运算符:
unsigned char myByte = 0xc2; // 11000010
char twoMost = (myByte & 0xff) >> 6; // 00000011
0xff
仅"选择"(掩码)前 8 位,因此如果 char
类型实际上大于 8 位,则丢弃其他所有内容。
通过将 6 位向右移动,您可以只保留最重要的两个位。然后,您可以应用如下switch
:
switch(twoMost) {
case 0: // 00
doSomething();
break;
case 1: // 01
doSomething();
break;
case 2: // 10
doSomething();
break;
case 3: // 11
doSomething();
break;
default:
// This is not possible, but better output an error message
}
似乎您想获取前两个最高有效位的值。
这可以通过过滤掉它们并将值向左移动 6 位来完成:
unsigned char input;
unsigned char output;
input = whatever_you_want;
output = input & 0xc0; //0xc00 = 0b11000000
output = output >> 6;
首先,字节序与单词中的字节顺序有关,而不是与字节中位的顺序有关。
其次,您需要两个最高有效位,而不是 MSB。
也就是说,这是代码:
unsigned char c = Something(); //That's your byte; comes from somewhere
unsigned char x = c >> 6;
因此,如果 MSB 为 11,则 x 的值将为 3。如果是 10,则为 2。如果为 01,则为 1。如果为 00,则为 0。
变量的Unsigned
性很重要;它使>>运算符的行为像按位移位,而不是算术移位。对于 signed char
变量,您需要以下表达式:
char x = (c >> 6) & 3;
原版char
数据类型的有符号性特定于编译器和平台,并且可能受到编译器选项的影响。
相关文章:
- 如何在整数中找到最低有效位(LSB)的位置?c ++
- 将一个数字拆分为多个数字,每个数字只有一个有效位
- C ++有效地获取带有索引的字符串的子字符串
- 如何有效地获取"std::string"子字符串的"string_view"
- 如何按位获取数字而不是求反符号位
- boost::unordered_multimap:有效地获取bucket中的所有元素
- 最高有效位基数排序如何比最低有效位基数分类更有效
- 如何在C++中获得整数的j个最高有效位
- C++找到二进制数的最高有效位
- 从 8 位值中获取最高有效位
- 如何将最低有效位写入缓冲区
- 将数据存储在指针的最高有效位中
- 修改双精度的最低有效位(Java和c++)
- 最有效的获取计时器的方法
- 按位运算符从32位获取字节
- 有效地获取C++链表中最大的3个整数(未排序)
- 在c++中将int的最低有效位放入char中
- C/ c++中最低有效位(LSB)和最高有效位(MSB)的校验值
- 是否设置了最高有效位
- 将不相关的数据存储在指针的最低有效位是否可靠