bitarray.c

来自「压缩包里面的都是精致的基本C语言小程序」· C语言 代码 · 共 116 行

C
116
字号
#include <stdio.h>#include "error.h"#include "mystdlib.h"#include "bitArray.h"struct bitArray{  int *array;  int size;};bitArray newBitArray (int size){  bitArray ba = checkedMalloc (sizeof (*ba));  ba->array = checkedMalloc (sizeof(*(ba->array)) * size);  for (int i=0; i<size; i++)    *(ba->array+i) = 0;      ba->size = size;    return ba;}void bitArrayChangeBit (bitArray ba, int index){  if (index<0 || index>=ba->size)    exception ("index out of bound\n");      *(ba->array+index) = 1;  return;}int bitArrayGetBit (bitArray ba, int index){  if (index<0 || index>=ba->size)    exception ("index out of bound\n");      return *(ba->array+index);}bitArray bitArrayAnd (bitArray ba1, bitArray ba2){  if (ba1->size != ba2->size)    exception ("invalid size\n");      bitArray newBa = newBitArray (ba1->size);    for (int i=0; i<ba1->size; i++)  {    *(newBa->array+i) = (*(ba1->array+i)) & (*(ba2->array+i));  }    return newBa;}bitArray bitArrayOr (bitArray ba1, bitArray ba2){  if (ba1->size != ba2->size)    exception ("invalid size\n");      bitArray newBa = newBitArray (ba1->size);    for (int i=0; i<ba1->size; i++)  {    int k1 = (*(ba1->array+i));    int k2 = (*(ba2->array+i));    if (k1 || k2)    {      *(newBa->array+i) = 1;    }  }    return newBa;}bitArray bitArrayNegation (bitArray ba){  bitArray newBa = newBitArray (ba->size);    for (int i=0; i<ba->size; i++)  {    int k = (*(ba->array+i));        if (k)    {      //printf ("now changing : %d\n", i);      *(newBa->array+i) = 0;    }    else     {      *(newBa->array+i) = 1;    }  }    return newBa;}void bitArrayOutput (bitArray ba){  for (int i=0; i<ba->size; i++)  {    printf ("%d->%d\n", i, *(ba->array+i));  }  return;}void bitArrayDestroy (bitArray ba){  checkedFree (ba->array);  checkedFree (ba);    return;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?