復習一個小知識點(反碼與按位取反)


第一點是:反碼與按位取反~

在Java中~符號是按位取反,例如,~5=-6。-5=4.  快速計算:一般~可以直接用(a+1)算,正數負數均可

思路:

是按位取反運算,與反碼是不同的,
反碼法規定,正數原反補碼相同,負數的反碼為原碼除符號位以外取反。
而按位取反運算中:正數取反是先將初始數值轉換成二進制數(6==》00000110),再對二進制數的每一位取反:即將0變為1、將1變為0。(00000110==》11111001),得到的是最終結果的補碼,要轉換為最終結果的原碼則需再次取補碼,(此處一種逆着算為11111001-1除符號位全取反10000111即為-7,另一種為11111001==》10000110+1==》10000111也為-7)就能得到計算結果。
負數取反:先將初始數值轉換成二進制數(以-6為例,10000110),再取得二進制數的補碼(10000110==》11111001+1==》11111010),之后對補碼的每一位取反:即將0變為1、將1變為0(11111010==》00000101即為5)。得到的是最終結果的補碼(由於正數的原碼、反碼、補碼相同,該數即為原碼),要轉換為最終結果的原碼則需再次取補碼,就能得到計算結果。

注:在計算機中,運算都是通過補碼進行計算的,這個點也是今晚我一直想不到的點,以至混淆了概念,胡亂取反。

第二個點是:IO流方面

IO流分為字節流(0-255)和字符流(0-65535)。

字節流:InputStream與OutputStream,這兩個類都是抽象類,不能直接new,可以通過子類來new,FileInputStream、FileOutputStream.

字符流:Reader與Writer   子類InputStreamReader、OutputStreamWriter

轉換流,字節流可以轉換成字符流,JDK提供了兩個人將字節流轉換為字符流,分別是:InputStreamReader、OutputStreamWriter.

socket傳輸信息都是以二進制形式傳輸,也就是字節流進行處理。當傳輸到客戶端或者服務端,如果數據比較大,就不能使用字節流來存儲,需要包裝一下字節流,將字節流裝換成字符流,在字符流中還可以將信息放到緩存區,也就是BufferReader與BufferWriter中。

注意一點:FileWriter創建來一個輸出流對象out,out.write(s)是把字符串s輸進了流里,並沒有輸出到文件中,你必須調用out.flush()方法講流中數據沖進目標文件,注意,io流用完后要記得用close()方法關閉,否則將有意想不到的麻煩,另外close()方法也具有flush()的作用。

 

第三個點是很多報文里頭需要占據不止8位(一個字節)的空間,需要用位才做來存放,

int result = b1<<8+b2;//這個方法可以得到b1與b2共16位返回的值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM