回覆列表
  • 1 # 使用者3109457674405

    補碼的定義:

    正數的補碼等於正數的原碼;

    負數的補碼為其原始碼除符號位不動,其餘各位變反再加1。

    比如,十進位制數35和-1在8位機中的補碼錶示為:

    x1=35, x2=-1;

    因為x1>0,所以[x1]補=[x1]原=0010 0011;

    因為x2<0,所以[x2]原=1000 0001;

    [x2]補=1111 1110+1=1111 1111;

    對於機器來說,它記錄的只是補碼本身:0010 0011和1111 1111,也就是說機器並不知道這段補碼是有符號數還是無符號數,但是當你使用高階語言編寫程式,定義了int或者unsigned int,那麼就會根據相應的定義,認為這段機器碼的第一位是數值位或者符號位。

    其中,64位程式上的C語言整型資料型別的典型取值範圍為

    int:-2 147 483 648 ~ 2 147 483 647

    unsigned int:0 ~ 4 294 967 295

    希望回答對你有幫助。

    參考資料:

    1.《C語言與程式設計(高等學校規劃教材)》曹計昌//盧萍//李開,電子工業出版社

    2.《Computer Systems: A Programmer"s Perspective(深入理解計算機系統》by Randal Bryant

  • 2 # 前川陽光

    並不是符號位。只要把模選到大於鄰域的二倍,則數值位向左的所有位數皆可“看作”符號位,但它們對2的n次方的模來說是數值,對2的n一1次方減1的模來說是整數商。什麼符號位不變,其它位取反加一,只是方便計算而已,與補碼無關。

  • 中秋節和大豐收的關聯?
  • 酒店開張。求詩?