個(gè)人博客: http://zhangsunyucong.top
前言
話回我剛剛畢業(yè)來(lái)到深圳時(shí),作為一個(gè)android菜鳥在一個(gè)大神波哥的指導(dǎo)下竹观,學(xué)到了很多東西。其中,二進(jìn)制和分類就是我印象最深的谦絮。想按自己理解記錄一下题诵。
想一下,有這樣的需求:一個(gè)物體有一個(gè)種類屬性层皱,它這個(gè)屬性有很多相互獨(dú)立可以相加的值性锭,也就是它有很多種情況,而且一個(gè)物體可同時(shí)具有其中一個(gè)或者多個(gè)情況叫胖。而我們想用一個(gè)數(shù)字就表示它的所有情況(這就是數(shù)學(xué)思維草冈,總把東西抽象化)。
來(lái)個(gè)具體的瓮增,用于表示一個(gè)人是否有高血壓怎棱,高血糖,高血脂這種屬性绷跑。這個(gè)屬性可以有各種情況的值拳恋,一個(gè)人可以只是有高血壓、高血糖或者高血脂砸捏,也可以有“三高”诅岩。那我們?nèi)绾斡靡粋€(gè)十進(jìn)制的值來(lái)表示一個(gè)人的這個(gè)屬性的各種情呢?
我們可以讓十進(jìn)制數(shù)字的二進(jìn)制表示的每一位代表一種情況带膜,運(yùn)用二進(jìn)制的位運(yùn)算來(lái)表示和判斷它的各種情況吩谦。
思路分析
還是上面舉的例子。二進(jìn)制的每一位代表一種情況膝藕,三種情況我們可以用二進(jìn)制的四位表示就可以式廷。其他更多的情況,可以用更多的位來(lái)表示芭挽。我們約定結(jié)果的格式表示為:二進(jìn)制滑废,十進(jìn)制。
高血壓: 0001袜爪,1 蠕趁。---表示一個(gè)人只有高血壓
高血糖: 0010,2 辛馆。---表示一個(gè)人只有高血糖
高血脂: 0100俺陋,4 。---表示一個(gè)人只有高血脂
那如何表示其他各種情況呢昙篙?
表示一個(gè)人有高血壓和高血糖:0001 | 0010 = 0011腊状,3
表示一個(gè)人有高血壓和高血脂:0001 | 0100 = 0101,5
表示一個(gè)人有高血糖和高血脂:0010 | 0100 = 0110苔可,6
表示一個(gè)人有高血壓缴挖、高血糖和高血脂: 0001 | 0010 | 0100 = 0111,7
我們就說焚辅,這就是各種情況“相加”映屋。
如果要從多種情況中減除一種或者多種情況苟鸯,又如何操作呢?
比如代表“三高”的7棚点,我們?nèi)绾螐闹袦p除高血壓這種情況倔毙。
7 & (~0001) = 0111 & (~0001) = 0111 & 1110 = 0110,6
說明:自身取“非”是為了不影響原來(lái)其他的各種情況乙濒,只改變自身那種情況的位。減除多種情況卵蛉,以此類推颁股。這就是情況的“相減”
如果給我們一個(gè)十進(jìn)制:7,我們又如何知道它表示有多少種情況呢傻丝?
1甘有、是否有高血壓 0001?
7 & 0001 = 0001 即 0111 & 0001 = 0001
2葡缰、是否有高血糖亏掀?
7 & 0010 = 0010 即 0111 & 0010 = 0010
3、是否有高血脂泛释?
7 & 0100 = 0100 即 0111 & 0100 = 0100
這實(shí)際就是滤愕,位的與運(yùn)算是否等于自身。這就是各種情況的判斷方法怜校。