AlgoMooc
← 返回题库

K0021. 补码二进制转十进制

中等通过率 57% · 提交 190 · 通过 109
字符串数学模拟

小慕最近在开发一个二进制数据解析器,用来读取来自旧设备的存储文件。这些文件使用补码格式保存整数,但小慕发现,当数据的是`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

看不懂题目?点开图解(训练营专属)

登录后查看题目图解

题目图解为训练营学员专属内容,请先登录。

微信扫码登录还不是训练营学员?了解训练营 →
写完代码点「提交」,将对全部测试用例判题。