[英]Error in binary String to Integer converter
我在代碼中實現了二進制將字符串轉換為整數的方法。 問題是方法輸出結果的后兩位數字錯了,例如:
結果: 11111111100001001000101110000100
結果: 11111111100001001000101110000011
結果的最后兩位總是有問題的。
任何幫助將不勝感激。
碼:
public static int binaryStringToInteger (String binaryString){
char[] digits = binaryString.toCharArray();
int binaryInteger = 0;
int count = 0;
for(int i=digits.length-1;i>=0;i--)
{
if(digits[i]=='1')
{
binaryInteger +=(int)Math.pow(2, count);
}
count++;
}
return binaryInteger;
}
您的代碼沒有什么錯,除了int類型只能容納這么多。 Int保留4個字節,即8bitsx4 = 32位,其中第一個保留用於符號,如果為1,則為負,如果為0,則為正。請嘗試使用可容納64位的long int:
public static long binaryStringToInteger (String binaryString){
char[] digits = binaryString.toCharArray();
long binaryInteger = 0;
int count = 0;
for(int i=digits.length-1;i>=0;i--)
{
if(digits[i]=='1')
{
binaryInteger +=(long)Math.pow(2, count);
}
count++;
}
return binaryInteger;
}
還要檢查以下內容: https : //docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
public static long binaryStringToInteger (String binaryString){
char[] digits = binaryString.toCharArray();
long binaryInteger = 0;
long count = 0;
for(int i=digits.length-1;i>=0;i--)
{
if(digits[i]=='1')
{
binaryInteger +=(long)Math.pow(2, count);
}
count++;
}
return binaryInteger;
}
並且在轉換binaryInteger
:
Long.toBinaryString(binaryInteger);
我希望這個測試結果可能會有所幫助。 它清楚地顯示了發生了什么。
binStr = 1 int = 1
binStr = 11 int = 3
binStr = 111 int = 7
binStr = 1111 int = 15
binStr = 11111 int = 31
binStr = 111111 int = 63
binStr = 1111111 int = 127
binStr = 11111111 int = 255
binStr = 111111111 int = 511
binStr = 1111111111 int = 1023
binStr = 11111111111 int = 2047
binStr = 111111111111 int = 4095
binStr = 1111111111111 int = 8191
binStr = 11111111111111 int = 16383
binStr = 111111111111111 int = 32767
binStr = 1111111111111111 int = 65535
binStr = 11111111111111111 int = 131071
binStr = 111111111111111111 int = 262143
binStr = 1111111111111111111 int = 524287
binStr = 11111111111111111111 int = 1048575
binStr = 111111111111111111111 int = 2097151
binStr = 1111111111111111111111 int = 4194303
binStr = 11111111111111111111111 int = 8388607
binStr = 111111111111111111111111 int = 16777215
binStr = 1111111111111111111111111 int = 33554431
binStr = 11111111111111111111111111 int = 67108863
binStr = 111111111111111111111111111 int = 134217727
binStr = 1111111111111111111111111111 int = 268435455
binStr = 11111111111111111111111111111 int = 536870911
binStr = 111111111111111111111111111111 int = 1073741823
binStr = 1111111111111111111111111111111 int = 2147483647
binStr = 11111111111111111111111111111111 int = -2
binStr = 111111111111111111111111111111111 int = 2147483645
binStr = 1111111111111111111111111111111111 int = -4
您遇到轉換問題:
2^31 > 2^31-1 = Integer.MAX_VALUE
因此, 語言規范的以下部分描述了從double
到int
的轉換:
該值必須太大(正值大或正無窮大),並且結果是int類型的最大可表示值。
因此,最后添加的值是2^31-1
而不是2^31
,這會導致問題。
我認為您在使用帶符號的整數值時遇到問題,因此應按如下方式處理適當的char(我認為是最后一個)符號位。
public static int binaryStringToInteger (String binaryString){
char[] digits = binaryString.toCharArray();
int binaryInteger = 0;
int count = 0;
for(int i=digits.length-2; i>=0;i--)
{
if(digits[i]=='1')
{
binaryInteger +=(int)Math.pow(2, count);
}
count++;
}
if(digits[digits.length-1] =='1')
{
binaryInteger *= -1 ;
}
return binaryInteger;
}
另外,Integer.toBinaryString()創建一個無符號的二進制字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.