2017-02-13 4 views
-1

だから私はこの(C言語)whileループに2つの異なる整数値の条件付き引数を入れる方法はありますか?

のようなものを持っている私たちは、正または負の整数のバイナリ文字列のいずれかを取り、それが左端の上位ビット

に到達するために取得するのにかかる右シフトの量を数えることができる機能を持って言うことができます

int shiftCount(int x){ 
    int count = 0; 
    int temp = x; 

    while((temp!=1) || (temp!=-1)){ //if negative int, terminate at first -1 
     count+=1; 
     temp=temp>>1; 
    } 

    return count; 
} 

これは私が望むものを返しません。それは決して終わりのないループで終わります。それは、それが両方の条件を達成しようとしているからです。 whileループで2つの異なる符号付き値を簡単にテストする実際の方法はありますか?それとも2つの別々の条件文を作成しなければなりませんか?

+0

'||'の代わりに '&&'を意味しますか? 'temp!= 1 || temp = -1は、tempが1でないか、-1でないことを意味します。もちろん、常にtrueです。 –

+0

このような時には[De Morgan's Laws](https://en.wikipedia.org/wiki/De_Morgan's_laws)を覚えておくと便利です。 –

+0

両方のケースを正しくテストできますか? –

答えて

1

あなたのまたはは常にtrueです。 temp1-1の両方になることはできないため、常に1でないか、-1ではありません。

関連する問題