#10312. 算补码

内存限制:256 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: Turing001

题目描述

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

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

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

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

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

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

十进制数		原码		反码		补码
--------------------------------------------------------
85		0101 0101	0101 0101	0101 0101
--------------------------------------------------------
−85		1101 0101	1010 1010	1010 1011
--------------------------------------------------------
99		0000 1001	0000 1001	0000 1001
--------------------------------------------------------
−9		1000 1001	1111 0110	1111 0111
--------------------------------------------------------

不过蒜头君今天想让你尝试计算的不是 8 位的补码,而是 32 位的补码,因为int是 4 字节 32 位的。

32 位的补码是最高一位为符号位,剩下 31 位是跟数的大小有关的。

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

输入格式

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

输出格式

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

样例

样例输入1

00000000000000000000000001010101

样例输出1

85

样例输入2

11111111111111111111111110101011

样例输出2

-85