1. 程式人生 > >java中的16進位制用法

java中的16進位制用法

public static final int NETWORK_NONE = 0x01; public static final int NETWORK_MOBILE = 0x02; 這樣類似的程式碼見過不少,但是隻曉得是16進位制,但是為什麼要寫成16進位制,以及有什麼好處卻沒有仔細研究過。

在java中,宣告一個10進位制數字很簡單,直接寫數字就行,比如 98. 代表的十進位制資料就是98.很易懂。 宣告一個8進位制。則在數字的前面加上一個0, 即可,例如 077。 但是每一位的數字範圍是 0-7. 代表的10進位制數字是,115. 宣告一個16進位制,在數字的前面加上一個0x即可。例如 0xff。 每一位的數字範圍是 0-f。 代表的10進位制數字是 377. 那麼為什麼大家喜歡用16進位制呢?暫且把他們轉換成2進位制來看看。 如下: 16進位制 = 8進位制 = 二進位制 = 10進位制 0x00 = 00 = 00000000 = -0 0x01 = 01 = 00000001 = 1 0x02 = 02 = 00000010 = 2 0x03 = 03 = 00000011 = 3 0x04 = 04 = 00000100 = 4 0x05 = 05 = 00000101 = 5 0x06 = 06 = 00000110 = 6 0x07 = 07 = 00000111 = 7 0x08 = 010 = 00001000 = 8 0x09 = 011 = 00001001 = 9 0x0a = 012 = 00001010 = 10 0x0b = 013 = 00001011 = 11 0x0c = 014 = 00001100 = 12 0x0d = 015 = 00001101 = 13 0x0e = 016 = 00001110 = 14 0x0f = 017 = 00001111 = 15 0x10 = 020 = 00010000 = 16 … 0x00 = 00 = 00000000 = 0 0x02 = 02 = 00000010 = 2 0x04 = 04 = 00000100 = 4 0x08 = 010 = 00001000 = 8 0x10 = 020 = 00010000 = 16 0x100 = 0400 = 100000000 = 256 0x1000 = 010000 = 1000000000000 = 4096

接下來專門看看16進位制與二進位制 0x00 = 0 = 0 0x10 = 10000 = 16 0x100 = 100000000 = 256 0x1000 =1000000000000 = 4096 16進制中,1向左移動一位相當於二進位制左移4位。

下面是專門的8進位制與二進位制 00 = 0 010 = 1000 0100 = 1000000 01000 = 1000000000 010000 = 1000000000000 8進制中,1向左移動一位相當於二進位制左移3位。

那麼我們如果有些情況下要寫一些程式碼,表示不同型別不同狀態。可以用16進位制記錄 如: 描述材質。假設有, 木質, 包含 竹木,紅木,檀木,桃木 金屬, 包括銅,鋁,鐵,金,銀。 氣體, 包括 氧氣,氮氣,氦氣。 那麼如何描述,能達到一種,給你一個對應的詳細type,你就可以快速的知道他是屬於什麼種類的呢??? 利用16進位制,外加位運算就可以滿足這種情況 竹木 = 0x10; 紅木 = 0x11; 檀木 = 0x12; 桃木 = 0x13;

銅 = 0x100; 鋁 = 0x110 鐵 = 0x120 金 = 0x130 銀 = 0x140

氧氣 = 0x1000 氮氣 = 0x1100 氦氣 = 0x1200

然後隨便給你個具體的type,讓你區分出是什麼類: 你可以這樣做: 木質的mask = 0x10 金屬的mask = 0x100 氣體的mask = 0x1000 然後對指定的type做出按位與操作。可以很快的得出是不是該類: 例如 氮氣的 type & 氣體的mask 即 0x1100 & 1x1000 兩者轉換為二進位制,實則是 1000100000000 & 1000000000000 看出來了嗎,,由於type的最高位和mask的最高位是一樣的,一旦按位與(兩者都是1,結果才是1), 結果就是true。這樣的按位與操作,可以很快的比較出特定的位是否為1.我們可以利用這個特性,讓某一類的某一位都是一個數,就可以做到很快的偵測類別。

例如 具有文具屬性的mask 為 0x10; 16進位制第二位為1 具有紙質屬性的mask為 0x100; 16進位制第三位為1 具有辦公用品特點的mask為0x1000; 16進位制第四位為1 那麼,一個列印紙,和一個試卷他們具有的特性可以描述為 列印紙: 0x1100 (第四位為1 代表是辦公用品, 第三位為1 代表是紙類),那麼它既是紙又是辦公用品 試卷: 0x110

如果有類似於區分類別的要求時,不妨用下16進製表示。但是原則上,8進位制實則也可以做同樣的事情,只不過八進位制是向左移動一位相當於 其二進位制數向左移動3位。為什麼大家喜歡用16進位制呢??我能想到的原因是,,16進位制 每一位是 0-f的範圍,表示的子類別比較多。。。。

關於 二進位制的左移右移, 如果代表的十進位制是偶數, 右移n位代表除以2的n次方, 左移n位則代表乘上2的n次方。