java复习2(编码)
1補充知識點:
重要概念
? ? 一個整數a=14,那么
? ? a對應的二進制數值b=01110。
? ? a對應的原碼c=01110.
? ? 注意b和c雖然都是1110,但是兩個是不同的,b是a對應的二進制數值,c是b這個數據值在計算機為了表示這個值所進行的編碼。b的最高位可以省略 c的最高位確是符號位不能省略。
1.1 數據與文字的編碼
根據計算機中信息的編碼表示方式,將數據分為“定點數據”、“浮點數據”、“圖形數據”和“文字數據”
“定點數”是指小數點位置固定不變的數。如整數 2700和純小數0.123。
“浮點數”是指小數點位置變化的數 如浮點數 123.567。
通過兩個例子就看出了“定點數”和“浮點數”的差別了。
“定點數”和“浮點數”統稱為”數值編碼“
?
“點定數”在計算機中可以使用“原碼、補碼、反碼”來表示。
?
在java語言中,你就認為 byte、short、char、long是補碼表示的。
補碼 表示法也是用最高一位代表符號,其余各位代碼表示數值。
?
對于一個整數x,補碼的編碼方式為:
正數的補碼與源碼相同,
負數的補碼將x的二進制位按位取反后再最低位加1.
?
如 正整數x=1010 則 x的原碼=01010;x的補碼=01010
如 負整數y=-1010 則y的原碼=11010;y的補碼=10110
?
對于一個純小數x=0.1010 y=-0.1010? (這個可以忽略)
x的原碼 = 0.1010 x的補碼=0.1010
y的原碼 = 1.1010 y的補碼 =1.0110
?
求一個負數的補碼的另一個方法: 從最低位開始,對遇到的0和第一個1取其原碼,從第一個1之后開始直到最高位均按位取反。
?
補碼的特點:
1.負數比正數多一個,零有唯一的編碼,即0000....0。
怎么理解這句話呢?
舉例用一個四位二進制數表示一個數,其中最高位是符號位。
正數的范圍為0 001 ---到0 111 對應十進制數為 1到7
負數的范圍為1 000 ---到1 111 對應十進制數為 -8到-1
就多出來這個1000(對應的-8 這是根據補碼的數值計算公式得出的)
一個n+1為負整數的補碼,其數值計算公式為
???
本例的n+1位為4,然后n也就3,所以:
? 1 000對應十進制值 = - 1*(2*2*2)+0*(2*2)+0*(2)+0 = -8
?
零 就是 0000? (也是使用補碼表示數值的原因之一 用補碼表示數 0 值唯一? 用原碼表示數的時候 0 值有兩個+0和-0)
?
2.將一個數的補碼按位取反,在最低位上加1后就得到它的相反數的補碼。經常用這個特點求一個負數的補碼
如 正6(補碼是0110)的相反數是 -6(1010)
這個特性非常重要,
應用于
(1)求一個負數的補碼時,先求這個數相反數(也就是一個整數)的補碼,通過這個特性求出這個負數的補碼。
如 a=-6 求a的補碼。 ?
1. a的相反數為 6
2. 6的補碼是 0110
3. 根據這個特性求得a的補碼為1010
(2)求一個負數補碼對應的十進制值時,使用上述公式比較麻煩,而使用這個特性就簡單多了。
如 求補碼1010對應的十進制值。
1.1010的最高位是1 所以知道此數為負數。
2.根據這個特性求出對應的相反數(正數)為0110.
3.這個正數0110對應的十進制值為6.
4.將負號加到6上,就得到了-6。
?
?
下面是了解:
”浮點數“通過尾數和階碼的概念來表示。
怎么理解呢?例子如下
12.8這個浮點數可以通過科學記數法來表示 即 0.128*102
128對應的二進制原碼是0100000000
2對應的二進制數是10
那么 在計算機中怎么表示這個數呢?
將”10“放入尾數,0100000000放入”階碼“,將0放入”符號“
這樣0 0100000000 10 這一串就表示12.8這個浮點數
也就是 將12.8 編碼為0 0100000000 10
?
文字編碼(也就是java的字符編碼或字符串編碼)
1.西文字符的編碼:
ASCII碼:用8個二進制位表示,最高位是0,余下7位可以給出128個編碼,表示128個不同的字符
其中95個對應英文字母、數字等可顯示和可打印的字符。另外33個字符的編碼值為0-31和127
表示一些不可顯示的控制字符。
33個控制字符如下:
0 NUL(null) 空字符、 1 SOH(start of headline) 標題開始 、2 STX (start of text) 正文開始、? 3 ETX(end of text) 正文結束、 4 EOT (end of transmission) 傳輸結束 、5 ENQ (enquiry) 請求、6 ACK (acknowledge) 收到通知 、7 BEL (bell) 響鈴 、8 BS (backspace) 退格、9 HT (horizontal tab) 水平制表符 、10 LF (NL line feed, new line) 換行鍵 、11 VT (vertical tab) 垂直制表符、12 FF (NP form feed, new page) 換頁鍵 、13 CR (carriage return) 回車鍵 、14 SO (shift out) 不用切換、15 SI (shift in) 啟用切換 、16 DLE (data link escape) 數據鏈路轉義 、17 DC1 (device control 1) 設備控制1、18 DC2 (device control 2) 設備控制2 、19 DC3 (device control 3) 設備控制3 、20 DC4 (device control 4) 設備控制4、21 NAK (negative acknowledge) 拒絕接收 、22 SYN (synchronous idle) 同步空閑 23 ETB (end of trans. block) 傳輸塊結束、24 CAN (cancel) 取消 、25 EM (end of medium) 介質中斷 、26 SUB (substitute) 替補、27 ESC (escape) 換碼(溢出)、 28 FS (file separator) 文件分割符 、29 GS (group separator) 分組符、30 RS (record separator) 記錄分離符、 31 US (unit separator) 單元分隔符 、32 space 空格、127 DEL(delete 刪除)
?
計算機的鍵盤能將用戶單擊的按鈕用ascii編碼的形式傳送給主機。
?
2.漢字的編碼:
漢字編碼=輸入用的編碼+機內存儲的編碼。
輸入碼分為:數字編碼、拼音碼、字形碼(如五筆)
怎么理解呢?如拿拼音碼舉例,對于”shang“這個拼音它對應”上“和”尚“。
其中”shang“這個拼音就需要編碼。
機內碼:
如GB2312規定了3755個最常用漢字和3008個較常用漢字。
圖中重點:
1 十六進制81對應的二進制是1000 0001 ASCII碼首碼為0
2 ”GB18030采用單字節、雙字節、四字節的三種方式編碼,全面兼容了ASCII碼和GB2312“
的意思是:在GB18030編碼庫中,十六進制的00---7F這個單字節碼就是對應了ASCII碼。
3 最后一句計算機中的漢字編碼都是軟件定義和處理的
3.十進制數的編碼:
1.2 定點數的加減運算
?
在數據運算中,參與運算的數據又成為”操作數(operand)“。
? ?1 定點的數的補碼加法公式:
? ? ? ? ? ? ? ? [x]補 + [y]補 = [x+y]補 ?就是兩個數的補碼相加,其結果就是這個兩個數相加后的補碼。
? ? ? ? ? ? 如x = 13,y=8 ,x+y=21,
? ? ? ? ? ? ? ?則[x]補=0 01101 ?, ??[y]補=0 01000 ?[x+y]補=0 10101
? ? ? ? 定點的數的補碼減法公式:
? ? ? ? ? ? ? ? [x]補 - [y]補 = [x-y]補 =?[x]補 +?[-y]補
? ?2.溢出的檢測方法:
? ? ? ? 上述補碼加減運算成立的前提是運算結果”不溢出“。
? ? ? ? 對于加法,只在正數加正數和負數加負數這兩種情況下才會溢出。符號位不同的兩個數相加不會產生溢出。
? ? ? ??對于減法,只在正數減負數和負數減正數這兩種情況下才會溢出。符號位相同的兩個數相減不會產生溢出。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java复习2(编码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初创公司想要证明小屏手机仍有市场需求,成
- 下一篇: 华为P60系列与Mate X3即将进入欧