#43957. 算补码

    ID: 43957 传统题 1000ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>条件分支字符串进制普及T1魔扣OJ

算补码

暂无测试数据。

在计算机中,整数是用二进制补码存储的,与之相关的还有原码、反码这两个概念,这里蒜头君为大家做一个简单的介绍。

无论原码、反码还是补码,第一位都是符号位,当第一位为 $0$ 时,表示非负数;反之表示负数。

原码:除符号位外,余下位上的数为原数的绝对值(注意,这里是二进制)。

反码:非负数的反码就是其本身;负数的反码是在原码的基础之上,符号位不变,余下的所有位取反。

补码:非负数的补码就是其本身;负数的补码就是在反码的基础之上 $+1$。

我们通过如下几个例子来进一步理解原码、反码和补码:

十进制数原码反码补码
$85$0101 01010101 01010101 0101
$-85$1101 01011010 10101010 1011
$9$0000 10010000 10010000 1001
$-9$1000 10011111 01101111 0111

不过蒜头君今天想让你尝试计算的不是 $8$ 位的补码,而是 $32$ 位的补码,因为int是 $4$ 字节 $32$ 位的。$32$ 位的补码是最高一位为符号位,剩下 $31$ 位是跟数的大小有关的。

蒜头君会把一个 $32$ 位补码给你,让你帮忙算一下它对应的十进制数是多少。

输入格式

输入第一行,包含一个仅有'0', '1'组成的字符串,且长度为 $32$ 。

输出格式

输出一行,包含一个整数,表示这个补码对应的十进制数。

数据范围

对于 $60\%$ 的数据,补码最高位为'0'

对于 $100\%$ 的数据,字符串仅由'0', '1'组成,且长度为 $32$ 。

00000000000000000000000001010101
85
11111111111111111111111110101011
-85