小慕最近在开发一个二进制数据解析器,用来读取来自旧设备的存储文件。这些文件使用补码格式保存整数,但小慕发现,当数据的是`1`时,解析结果总是出错,数值莫名其妙变成了负数。 为了修复这个Bug,小慕需要写一段程序,把给定的二进制字符串转换成对应的十进制整数。 文件中的数值采用补码存储,规则如下: - 若字符串长度小于 `32`,直接按正整数转换。 - 若字符串长度等于 `32`,需按补码规则处理: - 最高位是 `0` 时,直接转换为十进制数。 - 最高位是 `1` 时,按补码转换,结果可能为负数。
提示:带虚线的词点一下有通俗解释。
输入描述
一个二进制字符串 `S`(仅包含`0`和`1`)。 输入保证转换后的十进制数值在**32 位有符号整数**(`-2^{31}` 到 `2^{31}-1`)的范围内。
输出描述
输出 `S` 所表示的十进制整数。
示例
示例 1
输入
00011
输出
3
示例 2
输入
11111111111111111111111111111110
输出
-2
时间限制 1000 ms · 内存限制 128 MB