2014-05-08 39 views
0
#include<cstdio> 
#include<bitset> 
#include<iostream> 
#include<cmath> 
using namespace std; 
int main(){ 
    bitset<5> num(-5); 
    if(num[0]) 
     cout<<(num.to_ulong()-pow(2,5));// cout<<(num.to_ulong()-32); 
    else  
     cout<<num.to_ulong(); 
    return 0; 
} 

在上面的代碼中,如果使用註釋中給出的代碼,它會打印一個不同的數字(4294967291)。這裏發生了什麼?將二進制中的負數轉換爲十進制使用位集

回答

0

您必須將ulong減法的結果轉換爲符號長:

(((long)num.to_ulong())-32) 
+0

事實上,它工作得很好而沒有;即使2^5和32都是相同的值 – billyjayan

+0

對不起,我錯誤地先讀你的問題。更新了我的答案。 – collapsar

+0

完全工作!那是因爲從無符號整數中減去一個數字總會產生無符號數字? – billyjayan

相關問題