2010-12-26 3 views
1

は、これらの演算子の機能(= &、〜)は何であるこれらのCの演算子を説明することができ、私はこのコードは冗談として掲載して は、いずれか

を題した「早期Unixのソースで発見:」

if(rp->p_flag & SSWAP) { 
    rp->p_flag =& ~SSWAP; 
    aretu(u.u_ssav); 
} 

EDIT: 出典:http://www.bsdlover.cn/study/UnixTree/V6/usr/sys/ken/slp.c.html

+0

これはほんの少しのフリッパーですが、冗談は何ですか? –

+0

ここから見てくださいhttp://www.bsdlover.cn/study/UnixTree/V6/usr/sys/ken/slp.c.html私はコメントを削除しました –

答えて

5

~は、unary bitwise complementあるFLI psビットを整数で表します。

しかし、コメントを読んでコードを間違って読んだことを知りましたが、あなたが提示したコードは、近代のコンパイラでもコンパイルされません。

@Aviのおかげで、オペレータ=&は今日の意味で&=を意味しますが、この構文は現行のC標準よりも実際に古くなっています。

何であることは本当にここ&今日

を意味するだろうがbitwise ANDオペレータにaddress-ofオペレーターとして働き、そしてべきではありません。

このコードをコンパイル
int main() 
{ 
    int x = 5; 
    int y = 2; 
    x =& ~y; 
} 

を生成します:

error: lvalue required as unary ‘&’ operand

を私は本当に問題は、転写にあった、論理的に、それは&=ではなく、他の方法であるべきだと思います。

実際には&=の場合は、bitwiseとしています。

+2

しかし、例は '=&' not '&= ' –

+0

編集中止awook、 – birryree

+2

初期のCでは、代入演算子の右側に演算子がありました。したがって、 '=&'の代わりに '=&'、 '+ ='の代わりに '= +'でした。 – Avi

1

=&実際には2つの別個の演算子:=&であるため、行はrp->p_flag = & ~SSWAP;に相当します。

bitwise NOT演算子なので、~SSWAPSSWAPのビットを反転した結果になります。 & ~SSWAPは、~SSWAPという結果の参照になります。これはコンパイルエラーです。したがって、現代コンパイラ(C89以来)を使用してコンパイルすることはできませんが、=&は最新のコンパイラでは&=に相当します。

&=rp->p_flag~SSWAPbitwise ANDを適用し、rp->p_flagに結果を配置します。最終的な結果はの0ビットすべてがrp->p_flagのそれぞれのビットをオフにすることです。これは、少なくとも1つの1ビットがオフになる場合にのみ実行され、rp->p_flagの値が操作の結果変更される場合は、aretu(u.u_ssav)を呼び出すだけです。

+0

Ehrm、実際に '&'が '='の直後に来るとき、それは単項演算子として使用されるので、それはアドレス演算子です。もちろん、一時的なアドレスを取ることは全く意味をなさないので、これはタイプミスであることが明らかであり、 '&='(これは1つの演算子です)が意味されていました。 – sepp2k

+0

@ sepp2kあなたのコメントを読む直前に私に当たった。あなたが気にしないなら、私はこれを私の答えに組み込むつもりです。 – marcog

+0

C89以降、演算子=&はもう存在しません。 &演算子のみが有効です。それ以前のCコンパイラではこれは実際には有効だったので、これは本当に初期のUNIXソースコードからのものです。 –

4

初期のCでは、代入演算子の右側に演算子がありました。したがって、&=の代わりに=&+=の代わりに=+でした。

このコードは、特定のビットがセットされているかどうかをチェックし、そうであれば、アクションを実行してビットをオフにします。

1

Bは、XにYを追加し、X = Y +を使用して、一般的な割当を 演算子を導入しました。 表記は、 TMGに取り込んだAlgol 68 [Wijngaarden 75](McIlroy経由)でした。 (Bおよび早期Cは、オペレータ 代わり+ =の= +綴られた、1976年修復この 間違いは、Bの字句 アナライザで 最初のフォームを処理する誘惑簡単な方法によって を誘導した。)

関連する問題