2011-10-15 80 views
2

如何在C++中實現有符號移位?例如該代碼有符號移位

#include<iostream> 
using namespace std; 

int bit_number(int x){ 
int total=0; 
while(x){ 
    total++; 
    x>>=1; 
} 

return total; 
} 

int main(){ 
int x=10; 
//cout<<bit_number(x)<<endl; 
int a=bit_number(x); 
int b=2*a; 
x<<=(b-a); 
x=x>>>(b-a); 

while(x!=0){ 
    int k=x%2; 
    x=x>>1; 
    cout<<k<<endl; 
} 

return 0; 
} 

表明我這個錯誤:

Error 1 error C2059: syntax error : '>' c:\users\datuashvili\documents\visual studio 2010\projects\binst\binst\binst.cpp 19 1 Binst 

我知道,在Java中籤轉變,那C++?我該怎麼做?

+0

''>>可以實現一個標誌保護右移;它是實現定義的。結果的重要性是什麼?如果它是價值,你可能需要一個簡單的算術運算,更準確地反映你的意圖。 –

+4

爲什麼downvote?我們現在有人問問題嗎? – jalf

回答

1

C++「知道」的有符號整數轉移,然而,結果是實現定義的。

在C++中,>>表示移位(無符號和有符號類型)。因此,編譯器把你的>>>>>其次>(或者反過來)。

1

你有3 >>>第19行(看你的錯誤消息)

+1

我想這是他的問題。 Java有一個''>>>運營商(無符號右移,總是插入在最左邊的位0) – Mat

+0

了''>>>運營商是如此強烈反對運算符重載的語言僅僅是熱鬧。 – jalf

+0

@jalf呀是不是很大,在C++中,不能可靠地使用>>沒有很多額外的思想(以及大多數人只是引入錯誤),因爲你不知道你是否得到一個算術或邏輯移位?我很想看到一個海灣合作委員會的版本,只是將無符號的轉換解釋爲算術和有符號的轉換,作爲邏輯轉換 - 哦,這很有趣:D如果您需要約定來使操作符有用,它應該是規範的一部分。 – Voo