1. 程式人生 > 其它 >補碼與整型的轉換

補碼與整型的轉換

轉自:https://blog.csdn.net/weixin_43661242/article/details/85031263

https://blog.csdn.net/weixin_45447985/article/details/104328051

1.補碼

8位二進位制表示的範圍:-2^7~2^7-1。

具體編碼的規律如下:

編碼00000000代表的整數是0
編碼00000001代表的整數是1
編碼00000010代表的整數是2
……
編碼01111111代表的整數是127
編碼10000000代表的整數是-128(而不是128)
編碼10000001代表的整數是-127(而不是129)
編碼10000010代表的整數是-126(而不是130)

2.補碼轉換為整數

#include<bits/stdc++.h>
using
namespace std; typedef long long ll; int main(){ string s; cin>>s; ll ans=0; for(ll i=0;i<s.size();i++) ans=ans*2+s[i]-'0'; if(ans>=128) ans-=256; cout<<ans; return 0; }

補碼的符號位是參與運算的,原碼和反碼的符號位不參與運算。

定點整數:
x的補碼=10011;x的真值等於1*1+1*2+0*4+0*8+(-1)*16=-13
轉換為原碼驗證一下,x的原碼=11101,即-(1

1+02+14+1*8)=-13
所以,在定點整數中,補碼轉換為真值即可將符號位帶入運算,但是權值要根據符號位的具體表示含義做出更改。

所以在上述轉換程式碼中,直接判斷是否超過最大表示,若超過了那麼直接將符號位減去即可表示對應的負數。