一、补码的编码规则: 如果用8位二进制来表示一个整数,可以有2^8=256种编码可能性。 考虑到负数也需要编码,这256种编码被一分为二:代表128个负数和128个非负数。也就是说256种编码代表最小数从-128到最大数127之间的这256个数。这也意味着128到255这些数字没有分配到编码。本应该属于128到255的二进制编码被分配给了负数们。 具体编码的规律如下:
编码00000000代表的整数是0 编码00000001代表的整数是1 编码00000010代表的整数是2 …… 编码01111111代表的整数是127 编码10000000代表的整数是-128(而不是128) 编码10000001代表的整数是-127(而不是129) 编码10000010代表的整数是-126(而不是130) …… 编码11111111代表的整数是-1(而不是255)
二、补码转整数
#include
using namespace std;
typedef long long ll;
int main(){
string s;
cin>>s;
ll ans=0;
for(ll i=0;i=128) ans-=256;
cout
cout
s[++top]=n%2;
n/=2;
}while(n>0);
for(int i=0;i |