#43957. 算补码
算补码
暂无测试数据。
在计算机中,整数是用二进制补码存储的,与之相关的还有原码、反码这两个概念,这里蒜头君为大家做一个简单的介绍。
无论原码、反码还是补码,第一位都是符号位,当第一位为 $0$ 时,表示非负数;反之表示负数。
原码:除符号位外,余下位上的数为原数的绝对值(注意,这里是二进制)。
反码:非负数的反码就是其本身;负数的反码是在原码的基础之上,符号位不变,余下的所有位取反。
补码:非负数的补码就是其本身;负数的补码就是在反码的基础之上 $+1$。
我们通过如下几个例子来进一步理解原码、反码和补码:
十进制数 | 原码 | 反码 | 补码 |
---|---|---|---|
$85$ | 0101 0101 | 0101 0101 | 0101 0101 |
$-85$ | 1101 0101 | 1010 1010 | 1010 1011 |
$9$ | 0000 1001 | 0000 1001 | 0000 1001 |
$-9$ | 1000 1001 | 1111 0110 | 1111 0111 |
不过蒜头君今天想让你尝试计算的不是 $8$ 位的补码,而是 $32$ 位的补码,因为int
是 $4$ 字节 $32$ 位的。$32$ 位的补码是最高一位为符号位,剩下 $31$ 位是跟数的大小有关的。
蒜头君会把一个 $32$ 位补码给你,让你帮忙算一下它对应的十进制数是多少。
输入格式
输入第一行,包含一个仅有'0', '1'
组成的字符串,且长度为 $32$ 。
输出格式
输出一行,包含一个整数,表示这个补码对应的十进制数。
数据范围
对于 $60\%$ 的数据,补码最高位为'0'
。
对于 $100\%$ 的数据,字符串仅由'0', '1'
组成,且长度为 $32$ 。
00000000000000000000000001010101
85
11111111111111111111111110101011
-85