位元影像簡單實現

來源:互聯網
上載者:User
/* * ===================================================================================== * *       Filename:  bitset.c * *    Description:   * *        Version:  1.0 *        Created:  02/04/2013 10:25:38 AM *       Revision:  none *       Compiler:  gcc * *         Author:  jiangwenlong (http://blog.csdn.net/chlaws), jiangwenlong@pipi.cn *        Company:  PIPI * * ===================================================================================== */#include <stdio.h>#include <stdlib.h>#include <string.h>//find index of array#define BIT_WORD(n) ((n)/32)//get number of bit value#define BIT_MASK(n) (1<<((n)%32))static int bit_size = 0;#define uint unsigned int static uint *bitset = NULL;//return <0, have error; =0 successful//@param length is bitset have length bitsint create_bitset(int length);void free_bitset();//return < 0, have error; =0 successful//@param nbit is bit index //@param value avalid 0 or 1int set_bitset(int nbit,int value);//return < 0 have error; =0 succesful//@param nbit is bit indexint get_bitset(int nbit);int create_bitset(int length){int nword = BIT_WORD(length);int need_len = (nword+1)* sizeof(uint);bitset = (uint*)malloc(need_len);if(bitset == NULL) return -1;memset(bitset,0,need_len);bit_size = need_len * 8;return 0;}void free_bitset(){free(bitset);}int set_bitset(int nbit,int value){if(nbit < 0 || nbit > bit_size) return -1;if(bitset == NULL) return -2;if(value != 0 && value != 1) return -3;int index = BIT_WORD(nbit);if(value == 1)bitset[index] |= BIT_MASK(nbit);else{bitset[index] &= ~BIT_MASK(nbit);}return 0;}int get_bitset(int nbit){if(nbit < 0 || nbit > bit_size) return -1;if(bitset == NULL) return -2;int index = BIT_WORD(nbit);return (bitset[index] & BIT_MASK(nbit)) >> (nbit%32); }//test bitsetint main(){int n = 4125;create_bitset(n);int i = 0;for(; i < n; ++i){if(i%2 == 0)set_bitset(i,0);elseset_bitset(i,1);}for(i = 0; i < n; ++i){printf("bit[%d]=%d ",i,get_bitset(i));if(i > 0 && i % 10 == 0) printf("\n");}printf("\n");free_bitset();return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.