基於二進位制的集合(c語言)

2021-09-01 10:05:36 字數 1323 閱讀 5397

用c去操作集合,有時候覺得十分的麻煩,不過,集合又一定要用。苦思了一些日子,當集合遇到了二進位制,也當二進位製到了位運算。這個就很好解決。建立這樣的乙個模型,當集合a有元素a,就用1在a相應的位表示出來,否則就為0 。

乙個例子:a= --------7(111)

a有一字集a1=-------------5(101)

就這樣表示。

集合與二進位制有乙個很思意的相同點,n個元素的集合有2^n個子集;n位的二進位制有2^n個表示方法,好吧,讓他們對應起來吧。

對於集合b=,看下面:

|   集合  |  二進位制|   整數  |

|   空集  |  00     |   0      |

|     |  01     |   1      |

|     |  10     |   2      |

|   |  11    |   3      |

就這樣了。對於集合的操作也就是相應的操作了,寫乙個c**看得具體一點。

#includevoid bin_to_set(unsigned int x , char e)

else printf(",%c",e[i]) ;

}++i ;

x >>= 1 ;

}printf("}") ;

}unsigned int u(unsigned int x1 ,unsigned int x2)

unsigned int c(unsigned int x1 ,unsigned int x2)

unsigned int n(unsigned int x,int n)

int e(unsigned int x1 ,unsigned int x2)

void hind_set( char *c,int n)

}int main() ;

printf("的冪集:\n") ;

hind_set(c,3) ;

unsigned x1 = 5 ;//

unsigned x2 = 3 ;//

unsigned x = 7 ;//

printf("與並:") ;

bin_to_set(u(x1,x2),c) ;

printf("\n與交:") ;

bin_to_set(c(x1,x2),c) ;

printf("\n的非:") ;

bin_to_set(n(x1,3),c) ;

printf("\n是的子集嗎? %d",e(x1,x2)) ;

printf("\n是的子集嗎? %d",e(x1,x)) ;

return 0 ;

}

看一看結果:

c 二進位制 負數 二進位制概念

我們平時認識的數字比如1 2 3 4等數字叫做十進位制數字,我們可以看懂,但是計算機無法運算,如果計算機要計算這些數字就得將這些數字轉換成計算機能讀懂的資料,計算只能讀懂二進位制數字,二進位制的數字有什麼特徵呢?二進位制就是由1和0組成的數字,那麼為什麼計算機要使用二進位制資料呢?下面作為了解。a ...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

基於二進位制許可權管理

1 許可權值的設定 用二進位制來表示許可權值應該是按位來設定,每個位佔乙個,表示一種許可權,如 00000001表示十進位制1,00000010表示十進位制2,00000100表示十進位制4,00001000表示十進位制8 依次類推,才能清晰正確的標識,多種許可權的賦予則使用 或運算 此時各位比較混...