日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于源码,反码,补码(正数--负数)---------(-128)自己的理解

發布時間:2023/12/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于源码,反码,补码(正数--负数)---------(-128)自己的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以一個字節為例

1、無符號位,一個字節可以存放0~255共256個數字;有符號位存放-128~127共256個數字;

2、無符號全都表示為正數;有符號位則首位表示正負數,正數首位為0,負數首位為1(因此在判斷一個數為正還是負時會先看首位,如果為正直接算,如果為負還要經過求反碼、源碼)

以下以默認的有符號位示例

3、首先,要知道計算機中正數用源碼表示,負數用其正數的補碼表示;補碼為源碼的反碼加一(如-1即為1的反碼加一表示)

  1:0000 0001

  ?-1:1111 1111

  從1到-1的計算過程:0000 0001 ?取反碼為 ?1111 1110

            ?1111 1110 ? +1為補碼 ?1111 1111

  因此-1表示為 1111 1111

4、如果給你一個負數,要求你用二進制表示;

  第一:先判斷這個負數是否溢出(不管正負都要判斷),如果溢出就不能表示,如果要強制轉換就會造成數據不一致,那么原始數據就會丟失;

     如果不溢出,就下一步;

  第二:先用二進制表示出其對應的絕對值(正數)的二進制源碼;

  第三:根據源碼求反碼,源碼取反(~源碼);

  第四:根據反碼求補碼表示負數,反碼+1;

5、如果給你一個負數的二進制,求該二進制表示的負數為幾;

  第一:先求補碼,該負數的二進制-1;

  第二:根據補碼求源碼,補碼取反(~補碼);

  第三:將源碼算出代表幾;

?

關于牛客網題目的理解(正確答案為 B)

前言:不管什么都是按照上訴4、5計算;

  • 比如4,當正數溢出時,他還是會把源碼先(擴容后:如原本只裝1個字節,但是裝不下就擴用2個字節表示)表示出來,然后從低位截取再判斷正負再進行計算;
  • 當負數溢出時,他還是會將源碼表示出來,然后根據規則算出補碼,最后截取后存儲。由于截取后數值就變啦,因此所表示的就不是原來的數了,至于表示幾自己根據規則再算回去,有時甚至會變為正數就是這個原因;

?

因此這道題我是這么做的:

因為a為short類型,一共16位,表示128為:0000 0000 1000 0000

b為byte類型,一共8位,將a強制轉換后為:1000 0000

為什么1000 0000表示-128呢,我自己的理解是:

  • 首先首位為1,則表示為負數 ,負數用補碼表示,所以1000 0000為補碼
  • 補碼-1為反碼,即0111 1111
  • 反碼取反,為1000 0000
  • 1000 0000表示的的正值為27=128(這樣既符合正負數表示方法,數學數值上也說得通,包括16位的10000000 00000000表示-32768等等也是這個道理);所以1000 0000表示-128
  • 總結:因此我認為通過負數二進制求其表示的數時,最后得出源碼后,應該是求源碼表示的正值;而1000 0000在byte中比較特別,因為它的補碼與源碼相同,所以最后得出源碼時會比較懵逼,但如果記住這時該求正值就行了;以后自己按照這個計算方法計算便可以,方便好記

    轉載于:https://www.cnblogs.com/qiong2017/p/7666156.html

    總結

    以上是生活随笔為你收集整理的关于源码,反码,补码(正数--负数)---------(-128)自己的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。