int类型的-3的32位表示为:11111111111111111111111111111101
将32位翻转的时候应该为:10111111111111111111111111111111
当时在LeetCode做这题的时候想的是用字符串翻转,因为StringBuilder类中有reverse方法正好可以利用。但是发现,程序执行这一句代码的时候
int i1 = Integer.parseInt("11111111111111111111111111111101", 2);
就会抛出异常这样的异常警告

查找原因后知道,int类型是4字节,总共32位,但是Java中都是有符号类型,有符号类型的数最高位都是用来区分整数和负数的,把"11111111111111111111111111111101"放入parseInt()函数中便会抛出这样的异常。
解决方法:使用Integer类中另一个方法parseUnsignedInt(),把这个字符串的32位数看作成无符号类型。:
int i1 = Integer.parseUnsignedInt("11111111111111111111111111111101", 2);

本文讨论了在Java中如何处理32位二进制数,特别是涉及有符号和无符号转换的问题。当尝试将11111111111111111111111111111101这个32位二进制串转换为int类型时,由于最高位表示符号,会导致解析异常。解决方案是使用Integer.parseUnsignedInt()方法来解析无符号的32位二进制数。
622

被折叠的 条评论
为什么被折叠?



