vc++如何取出一个字节中的任意比特位

来源:百度知道 编辑:UC知道 时间:2024/06/14 14:43:48
刚接触VC++,希望能有一个返回byte数组的函数,这个函数可以取出一个字节(该字节为十六进制)的8个比特位,并把8比特位放入返回的byte数组中。先谢谢大家。

用 按位与运算,取出相应的 一位,然后右移到最右边,可得。
右数 第1位 用 2 的 0 次方 做 & 运算, 右移 0 位
右数 第2位 用 2 的 1 次方 做 & 运算, 右移 1 位
右数 第3位 用 2 的 2 次方 做 & 运算, 右移 2 位
右数 第i位 用 2 的 i-1 次方 做 & 运算, 右移 i-1 位
右数 第8位 用 2 的 7 次方 做 & 运算, 右移 7 位
下面例子,循环,依次取出 右数 1,2,3。。8 位:

#include<stdio.h>
#include<math.h>
int main(){
unsigned char c=0x33;
int b[8];
int i;
for (i=0;i<8;i++){
b[i] = ( (c & (unsigned char)pow(2,i)) >>i);
printf("%d ",b[i]);
}
return 0;
}
输出:
1 1 0 0 1 1 0 0

用 先右移 I-1 位,再 做 按位与 也 一样。
右数 第1位 右移 0 位, 再做 & 1 运算,
右数第 i位 右移 I-1 位,再做 & 1 运算
右数第8位 有移 7位 ,再做 & 1 运算:
unsigned char c=0x33;
int b[8];
int i;
for (i=0;i<8;i++){
b[i] = ( (c>>i) & 1);
printf("%d ",b[i]);
}
得:
1 1 0 0 1 1 0 0

是指这样吗,有问题hi我,讨论下

#include<iostream>
using namespace std;
typedef unsig