實驗程式是用vc6編譯,一定注意副檔名為c,不是cpp,下載前面幾個測試程式(鏈表、表、原子中有下載連結)中直接將下面來源程式覆蓋1.c的內容即可!
強烈建議在這些函數上設上斷點,按F11跟進去把源碼走一遍!
來源程式如下:
#include <stdio.h>#include <string.h>#include "include/bit.h"#pragma comment(lib, "libcii.lib")//列印函數void Print(int n, int bit, void *cl){printf("位置: %d---值: %d\n", n, bit);}void main(){//注意:C語言一定要將這些變數聲明放在函數的頭部Bit_T b1, b2, b3;int i = 0;int val = 0;//建立【5】位的bit位(位元取得這麼少,是為了列印方便觀察!)//≤32位時,分配1個int(32位)4位元組;//32-64位時,分配2個int(32位)4位元組;//..................................;b1 = Bit_new(5);//清除後列印printf("\nBit_clear清除後列印\n");Bit_clear(b1, 0, 4);Bit_map(b1, Print, NULL);//設定後列印printf("\nBit_set設定後列印\n");Bit_set(b1, 0, 4);Bit_map(b1, Print, NULL);//設定後列印printf("\nBit_put設定後列印\n");Bit_put(b1, 1, 0);Bit_put(b1, 4, 0);Bit_map(b1, Print, NULL);printf("\nBit_get 函數 = %d\n", Bit_get(b1, 1));printf("\nBit_length 函數 = %d\n", Bit_length(b1));printf("\nBit_count 函數 = %d\n", Bit_count(b1));//將b1的bit位清零後再“取反”,列印printf("\nBit_not設定後列印\n");Bit_clear(b1, 0, 4);Bit_not(b1, 1, 3);Bit_map(b1, Print, NULL);//【集合包含】// 做下列操作時,兩個位向量的長度必須相等!b2 = Bit_new(5);Bit_clear(b2, 0, 4);Bit_not(b2, 1, 3);if (Bit_lt(b1, b2))printf("b1 是 b2的真子集\n");elseprintf("b1 不是 b2的真子集\n");if (Bit_eq(b1, b2))printf("b1 == b2\n");elseprintf("b1 != b2\n");if (Bit_leq(b1, b2))printf("b1 是 b2的子集\n");elseprintf("b1 不是 b2的子集\n");//【集合包含】// 做下列操作時,兩個位向量的長度必須相等!b3 = Bit_new(5);b3 = Bit_union(b1, b2);printf("\n列印:b1+b2\n");Bit_map(b3, Print, NULL);//列印:b1+b2Bit_put(b1, 1, 0);b3 = Bit_inter(b1, b2);printf("\n列印:b1*b2\n");Bit_map(b3, Print, NULL);//列印:b1*b2b3 = Bit_minus(b1, b2);printf("\n列印:b1-b2\n");Bit_map(b3, Print, NULL);//列印:b1-b2b3 = Bit_diff(b1, b2);printf("\n列印:b1/b2(異或)\n");Bit_map(b3, Print, NULL);//列印:b1/b2}
輸出:
Bit_clear清除後列印位置: 0---值: 0位置: 1---值: 0位置: 2---值: 0位置: 3---值: 0位置: 4---值: 0Bit_set設定後列印位置: 0---值: 1位置: 1---值: 1位置: 2---值: 1位置: 3---值: 1位置: 4---值: 1Bit_put設定後列印位置: 0---值: 1位置: 1---值: 0位置: 2---值: 1位置: 3---值: 1位置: 4---值: 0Bit_get 函數 = 0Bit_length 函數 = 5Bit_count 函數 = 3Bit_not設定後列印位置: 0---值: 0位置: 1---值: 1位置: 2---值: 1位置: 3---值: 1位置: 4---值: 0b1 不是 b2的真子集b1 == b2b1 是 b2的子集列印:b1+b2位置: 0---值: 0位置: 1---值: 1位置: 2---值: 1位置: 3---值: 1位置: 4---值: 0列印:b1*b2位置: 0---值: 0位置: 1---值: 0位置: 2---值: 1位置: 3---值: 1位置: 4---值: 0列印:b1-b2位置: 0---值: 0位置: 1---值: 0位置: 2---值: 0位置: 3---值: 0位置: 4---值: 0列印:b1/b2(異或)位置: 0---值: 0位置: 1---值: 1位置: 2---值: 0位置: 3---值: 0位置: 4---值: 0Press any key to continue