[進位] 0xFF的小心得
[進位] 0xFF的小心得 8月 11, 2017 取得連結 Facebook X Pinterest 以電子郵件傳送 其他應用程式 因為筆者不是資訊出身,所以對這種基本的資料存儲不是...
[進位] 0xFF的小心得
8月 11, 2017
取得連結
X
以電子郵件傳送
其他應用程式
因為筆者不是資訊出身,所以對這種基本的資料存儲不是太熟,趁著這次研究資料處理的時候,仔細地做一次研究。
一切都是從0xFF開始的。
首先F代表著16進位,所以你看到FF,就是兩位數的16進位,換算成10進位,就是255。
所以FF=255。
再來要看資料的結構了,1/0這種機械碼,就是一個bit,每一個bit是0或1,8 bits就是1 byte。你把bit、byte、int之類的看成公斤公克之類的單位就知道了:
1 byte = 8 bits1 char = 1 byte1 short = 2 byte1 int = 4 byte
在資料傳輸時,會將真實的數值轉換成bytes,然後把每一位數拆開,收到資料的軟體再去把這些byte合起來。
比方說我們的真實數值可以由short來表示(short範圍: -65535~65535),由於short的格式是兩個byte,我們可以把它拆開成單純的byte,這應該是因為傳輸時不可能顧慮到資料的格式(int, string, UIView, NSString...),所以都用最基本的byte來傳輸。
拆的方法就是用0xFF和AND(&)以及>> (平移)。
AND這個邏輯運算是這樣:1 & 1 = 1,1 & 0 = 0。兩個都是1才會是1。
0xFF代表的十進位數值是255,如果以short表示,就是0000000011111111,最後8 bits是1。
所以任何的short數值,要怎麼分割開他兩個byte?
假設我今天要處理的short數值,已bit來表示,是長這樣:0011001110101010,那我第一次用AND取值:
0011001110101010 & 0000000011111111 = 0000000010101010
耶!成功取出後面8個bits。
那前面八個呢?這時要用>>。
0011001110101010 >> 8 = 0000000000110011
這表示你把每個bit往右移動8個位置,於是,前面8個bits就變成0了。
這時再AND:
0000000000110011 & 0000000011111111 = 0000000000110011
就取出另一部分的byte了。
當你要處理 int格式的數值呢?這時0xFF就變成 00000000000000000000000011111111,因為是4 bytes的資料啊。所以0xFF是端看你要處理怎樣的資料而定。
取得連結
X
以電子郵件傳送
其他應用程式
留言
Paris2019年9月25日 下午3:24作者已經移除這則留言。
回覆刪除回覆回覆匿名2019年9月25日 下午3:25short 範圍應該是 -32768 ~ 32767
回覆刪除回覆回覆新增留言載入更多…
張貼留言
熱門文章
[English] Execute vs Perform
今天來學習一下這兩個字吧。起因是我看到了一句話: Declare an intent to be executed when the user performs an action with your Notification. 這是Android講到關於intent的使用的文章。我開始好奇這兩個中文意思幾乎99%一樣的英文單字到底有什麼差異。單純看字典其實沒辦法分別,以下我會參考這篇 單字釋義 : perform:指執行一個行動、程序,通常是很嫻熟擅長或是很小心地去執行。 The ship's captain perform a wedding ceremony. execute:是指根據計劃或設計去執行任務或實行某樣事情。 execute the will. accomplish:此字意指某事成功地完成了。通常是需要韌性或才能的。 achieve:是指實現某事,通常這事是重要但困難的。 effect:是指透過媒介的力量去實現某個預期的結果。 The prescribed antibiotics didn't effect a complete cure. fulfill:是指履行期望,滿足要求、願望或命令。 All their desires could not be fulfilled. discharge:是指執行所有為了完成它(義務或職責)而必要的步驟。 這幾個字的意思實在是太像了,應該說,都是實行、執行,但是不同場合下卻是要用不同的字。所以在上面提到的句子中,perform an action是要執行一個行動,這行動是使用者要去執行的,比方說遞送訊息,當然這動作是很嫻熟的,也是要小心地去執行(按錯要重來)。而intent是程式內設計用來完成使用者要遞送訊息這個動作的工具,它是 被設計來 做這件事情的,所以用execute。 在我的感覺上,perform比較像是(主詞)主動去做一件事情,execute像是(主詞)被動去做一件事情。accomplish和achieve幾乎一樣,但achieve就是指努力地去達成某個目標,accomplish除此之外還可以指完成某個命令,跟achieve比起來多了一個意思。 也可以參考 這一篇 ,他多比較了幾個字,就不多講了。
[Eclipse] 開啟首字自動提示功能
如同Xcode和Visual Studio等編譯器他們都有首字自動提示功能,相對於Eclipse預設是沒有開啟的,用了好一陣子,到今天才想說來看看怎樣使用這種功能,沒想到比我想像的還要簡單。 基本上在輸入時,可以使用快捷鍵Alt+/來開啟選擇視窗,除此之外,直接讓這功能啟動的步驟如下: 在工具列上面選擇:Window>Preferences。 進入後,點選進入Java>Editor>Content Assist,畫面如下: 將畫紅線的那個check給勾選,然後要調整藍色框框框住的三個項目: 將200(我這邊的預設值)調成0,表示立刻啟動。 將"."改成 .abcdefghijklmnopqrstuvwxyz(, ,這表示遇到這些字符時都要啟動。 預設是@#,就保持不變。 修改好就按OK,這樣就完成了。