解析二進制反碼算數求和


  二進制反碼求和用在網絡數據包相關的校驗中,意思是 一組位數相同的二進制數,依次相加,每次最高位有進位就多加次1,得出的最終和再取反,便是結果。 把結果放到這組數中,重新計算一次,再次得到的結果會是0.

  初看不明白這種效驗是怎么達到目的的,為什么可以得到0。無意中想到的一種思路是:這組二進制數相加的和是一定的,最高位進位的次數是一定的,相當於記錄這組數據的和加上最高位的進位次數,再次得到的“和”取反。一個二進制數加上它的取反剛好全1不會產生進位,原來的那組數加入“和反”后,累加起來也不會產生更多進位。既不管把 “和反” 放到哪個位置,最高位進位次數不會改變,都相當於都是 “和” 加上 “和反”,既全1,再取反就是0.

 不清楚這種效驗是怎么最初想出來的。這樣做的好處是既驗證了和,也驗證了累加過程中產生的最高位進位次數,使得驗證更有效一些。不知道最開始是否是出於這方面考慮才用這種“二進制反碼求和”法,還是出於別的思路想出這種方法。不管是哪種,繞腦程度都太大了,坑有些深。


免責聲明!

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



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