设置数据类型的某一位为0或1,并获取;
#include "stdafx.h"
#include <iostream>
#include <bitset>
using namespace std;
typedef unsigned char uint8;
typedef unsigned int uint32;
// 获得32位无符号整形data的第id位的值
uint8 get_bit(uint32 id,uint32 data)
{
if(id>32) return 0;
uint32 t = (data >> ((id-1)%32))&1;
return (uint8)t;
}
// 给32位无符号整形data的第id位赋值val
void set_bit (uint32 id ,uint32 &data,uint8 val)
{
if(id>32) return ;
uint8 flag = val?1:0;
if(flag)
{
data |= 0x01<<(id-1);
}
else
{
data &= ~(0x01<<(id-1));
}
}
int _tmain(int argc, _TCHAR* argv[])
{
uint32 data = 0;
// 输出data的2进制结果
cout<<bitset<32>(data)<<endl;
// 设置data的第2位的值为1
set_bit(2,data,1);
cout<<bitset<32>(data)<<endl;
// 获取data的第2位的值
uint8 val = get_bit(2,data);
cout<<uint32(val)<<endl;
return 0;
}