我有一個項目,部分項目是將給定的0和1的字符串轉換爲小數。 (所以,將二進制轉換爲十進制,2-s和非2s恭維) 但是我遇到了一個奇怪的問題。 當我編譯和運行一個IDE,如Visual Studio和代碼塊的程序,輸出結果是正確的。 但是,當我使用Cygwin編譯並運行它時,或者在Linux機器上運行時,數字會變成兩倍。 並非所有人都來了兩次(就像乘以2)。 例如,8位2s恭維:1111 1111應該是十進制的-1,但是這個程序在運行到Linux機器時輸出-2。將2s恭維轉換爲小數。輸出是雙重
有沒有人有任何想法爲什麼會發生這種情況?
這裏是功能的代碼;
int convertToDecimal(string line)
{
int num = 0;
if (line[0] == '1')
{
for (int i = 0; i < line.length(); i++)
{
if (line[i] == '1')
line[i] = '0';
else
line[i] = '1';
}
for (int i = 0; i < line.length(); i++)
{
int j = line.length() - 1 - i;
if (line[j] == '1')
num = num + pow(2.0, double(i));
}
num = -1 * (num + 1);
return num;
}
for (int i = 0; i < line.length(); i++)
{
int j = line.length() - 1 - i;
if (line[j] == '1')
num = num + 1 * pow(2, i);
}
return num;
}
The expected output should be and what i get with Codeblocks or Visual Studio:
11111111111111111111111111111111 -1
11111111111111111111111111111110 -2
11111111111111111111111111111101 -3
11111111111111111111111111111100 -4
00000000000000000000000000001010 10
What I get is when run into Cygwin or Linux machine:
11111111111111111111111111111111 -2
11111111111111111111111111111110 -4
11111111111111111111111111111101 -6
11111111111111111111111111111100 -8
00000000000000000000000000001010 20
任何幫助,非常感謝。爲什麼會發生,以及可能會解決的問題。 我從來沒有遇到過這樣的問題。我運行Cygwin CodeBlocks和VS到一個窗口8.1 此外,有沒有辦法在程序中寫入,以便它檢測到正在運行的機器?
'-1' ='0b11111111','-2' ='0b11111110',如果有幫助。 'x * 2 == x << 1'技巧仍然適用,即使是負數。 – 2014-11-25 03:08:28
順便說一句,'pow'是一個雙重功能,受限於雙打,如果你接近52位信息左右,這將是重要的。等於'pow(2,x)'的整數是'1 << x'。 – 2014-11-25 03:11:04
你是說每次移位兩位? 是的,我知道乘以2與左移兩位是一樣的。 我的問題是,當我將它運行到兩個不同的地方時,爲什麼會得到兩個不同的結果? – user2512806 2014-11-25 03:11:06