如何将unsigned long int(32位)分割成8个小块
How to split an unsigned long int (32 bit) into 8 nibbles?
如果我的问题让你感到困惑,我很抱歉但这是我想要做的例子,
假设我有一个unsigned long int = 1265985549在二进制中,我可以把它写成01001011011101010110100000001101
现在我想把这个32位二进制数分割成4位像这样分别处理这4位
0100 1011 0111 0101 0110 1000 0000 1101
您可以使用位操作获得位置k
的4位蚕食,如下所示:
uint32_t nibble(uint32_t val, int k) {
return (val >> (4*k)) & 0x0F;
}
现在你可以在一个循环中得到每个小块,像这样:
uint32_t val = 1265985549;
for (int k = 0; k != 8 ; k++) {
uint32_t n = nibble(val, k);
cout << n << endl;
}
short nibble0 = (i >> 0) & 15;
short nibble1 = (i >> 4) & 15;
short nibble2 = (i >> 8) & 15;
short nibble3 = (i >> 12) & 15;
等根据解释其实际用法的注释,这里有另一种方法来计算有多少小块具有奇数奇偶校验:(未测试)
; compute parities of nibbles
x ^= x >> 2;
x ^= x >> 1;
x &= 0x11111111;
; add the parities
x = (x + (x >> 4)) & 0x0F0F0F0F;
int count = x * 0x01010101 >> 24;
第一部分只是一个常规的"xor all The bits"类型的奇偶校验计算(其中"all bits"指的是nibble中的所有位,而不是整个整数),第二部分是基于这个位计数算法,跳过一些不必要的步骤,因为某些位总是零,所以不需要添加。
相关文章:
- 进入第二个多项式后如何修复分割错误?
- 试图在第二个多维阵列中读取时会发生分割故障
- 该功能的第二个调用中的分割故障
- 知道分割故障在哪里比较两个文件
- 使用指针和结构C 计算两个点之间的距离,分割故障问题
- 分割故障添加了两个表示字符串的大数字
- 访问第一个元素时出现C++矢量分割错误
- C++如何使用多个分隔符分割字符串流
- 分割 使用指针访问 obj 向量中的第二个元素时出错
- 2个YUV文件的PSNR计算器使用c++分割错误
- 用空格分割字符串,但只得到第一个单词
- 制作一个2d的100x100数组,将其分割成4个25x25不同的输出
- 如何在多个.cpp和.cu文件之间分割类定义
- 如果字符串包含多个 ,如何在每25个换行符( )上分割字符串
- Regex每两个字符分割字符串
- 我们如何将一个100gb的文件分割成100个1gb的文件?
- 分割错误在两个浏览器插件具有相同的全局变量
- 在多个ui文件之间分割Qt表单
- 如何将一个大矩形分割成N个小矩形,使其看起来随机
- 如何将unsigned long int(32位)分割成8个小块