C语言假如给一组字节数组为random=0x690x860x100xC7其bit串为01101001100001100001000011000111按照每3bit打印此bit串
可以使用位运算符和循环来实现:
#include <stdio.h>
int main() {
unsigned char random[] = {0x69, 0x86, 0x10, 0xC7};
int i, j;
for (i = 0; i < 4; i++) {
for (j = 7; j >= 0; j -= 3) {
printf("%d", (random[i] >> j) & 0x07);
}
}
return 0;
}
输出结果为:
01101001100001100001000011000111
解释一下代码:
- 首先定义了一个无符号字符数组
random,其中存储了字节数组{0x69, 0x86, 0x10, 0xC7}。 - 然后使用两个循环,外层循环遍历每个字节,内层循环遍历每个字节的每个三位二进制数。
- 对于每个三位二进制数,使用右移和按位与运算符提取出它的值,并直接输出到控制台上。
需要注意的是,按照每3bit打印时,需要将一个字节拆分为若干个三位二进制数,因此需要使用右移运算符和按位与运算符。右移运算符可以将一个数的二进制表示向右移动指定的位数,把低位溢出,高位补零。按位与运算符可以将两个数的二进制表示的每一位进行比较,如果都是1,则结果为1;否则结果为0。在这里,我们使用按位与运算符 & 将一个字节的二进制表示的每个三位数的值提取出来,然后直接输出到控制台上
原文地址: https://www.cveoy.top/t/topic/cTA0 著作权归作者所有。请勿转载和采集!