- 论坛徽章:
- 0
|
一个测试用例:
#include <stdio.h>
#include <iostream.h>
#define BITS_PER_LONG sizeof(long)*8
unsigned long a=0xffff;
//位操作,将bitmap位图中,base开始的extent位置为new_value(0或1)
static void set_bitmap(unsigned long *bitmap, unsigned int base, unsigned int extent, int new_value)
{
unsigned long mask;
unsigned long *bitmap_base = bitmap + (base / BITS_PER_LONG);
unsigned int low_index = base & (BITS_PER_LONG-1);
int length = low_index + extent;
if (low_index != 0) {
mask = (~0UL << low_index);
if (length < BITS_PER_LONG)
mask &= ~(~0UL << length);
if (new_value)
*bitmap_base++ |= mask;
else
*bitmap_base++ &= ~mask;
length -= BITS_PER_LONG;
}
mask = (new_value ? ~0UL : 0UL);
while (length >= (int)BITS_PER_LONG) {
*bitmap_base++ = mask;
length -= BITS_PER_LONG;
}
if (length > 0) {
mask = ~(~0UL << length);
if (new_value)
*bitmap_base++ |= mask;
else
*bitmap_base++ &= ~mask;
}
}
int main()
{
unsigned long *b=&a;
set_bitmap(b,1,2,0);
cout<<BITS_PER_LONG<<","<<a<<endl;
} |
|