二進制和種類


個人博客: http://zhangsunyucong.top

前言

話回我剛剛畢業來到深圳時,作爲一個android菜鳥在一個大神波哥的指導下,學到了很多東西。其中,二進制和分類就是我印象最深的。想按自己理解記錄一下。

想一下,有這樣的需求:一個物體有一個種類屬性,它這個屬性有很多相互獨立可以相加的值,也就是它有很多種情況,而且一個物體可同時具有其中一個或者多個情況。而我們想用一個數字就表示它的所有情況(這就是數學思維,總把東西抽象化)。

來個具體的,用於表示一個人是否有高血壓,高血糖,高血脂這種屬性。這個屬性可以有各種情況的值,一個人可以只是有高血壓、高血糖或者高血脂,也可以有“三高”。那我們如何用一個十進制的值來表示一個人的這個屬性的各種情呢?

我們可以讓十進制數字的二進制表示的每一位代表一種情況,運用二進制的位運算來表示和判斷它的各種情況。

思路分析

還是上面舉的例子。二進制的每一位代表一種情況,三種情況我們可以用二進制的四位表示就可以。其他更多的情況,可以用更多的位來表示。我們約定結果的格式表示爲:二進制,十進制。

高血壓: 0001,1 。—表示一個人只有高血壓
高血糖: 0010,2 。—表示一個人只有高血糖
高血脂: 0100,4 。—表示一個人只有高血脂

那如何表示其他各種情況呢?

表示一個人有高血壓和高血糖:0001 | 0010 = 0011,3
表示一個人有高血壓和高血脂:0001 | 0100 = 0101,5
表示一個人有高血糖和高血脂:0010 | 0100 = 0110,6
表示一個人有高血壓、高血糖和高血脂: 0001 | 0010 | 0100 = 0111,7

我們就說,這就是各種情況“相加”。

如果要從多種情況中減除一種或者多種情況,又如何操作呢?
比如代表“三高”的7,我們如何從中減除高血壓這種情況。

7 & (~0001) = 0111 & (~0001) = 0111 & 1110 = 0110,6

說明:自身取“非”是爲了不影響原來其他的各種情況,只改變自身那種情況的位。減除多種情況,以此類推。這就是情況的“相減”

如果給我們一個十進制:7,我們又如何知道它表示有多少種情況呢?

1、是否有高血壓 0001?
7 & 0001 = 0001 即 0111 & 0001 = 0001
2、是否有高血糖?
7 & 0010 = 0010 即 0111 & 0010 = 0010
3、是否有高血脂?
7 & 0100 = 0100 即 0111 & 0100 = 0100

這實際就是,位的與運算是否等於自身。這就是各種情況的判斷方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章