3

私はC言語でいくつかのプログラムを試していて、これに出くわしました...

#include<stdio.h>
int main()
{
    int j = 3, k;
    k= !5 && j;
    printf("%d", k);
    return 0;
}

プログラムをコンパイルすると、結果が0になります。

そして、C#で同じコードを試したとき

public void logic()
{
    j = 5;
    k = !4 && j;
    Console.WriteLine("hence the value would be " + k);
}

これはエラーを生成します

( エラー 1 演算子 '!' は型 'int' C:\Documents and Settings\SANDEEP\My Documents\Visual Studio 2005\Projects\ConsoleApplication18\ConsoleApplication18\Program.cs 21 17 ConsoleApplication18 のオペランドに適用できません)

!C コードの出力が機能しない理由と、C# で演算子を使用する方法を知りたいです。助けてください。

4

8 に答える 8

9

5ブール値が true として解釈されると、ブール値!5の結果が false になり、これにより falseも返さ&&れます。intFalseは isとして解釈され0ます。

于 2010-03-05T16:44:28.003 に答える
9

C では、 などのゼロ以外の値5は「true」と見なされるため、 、または「false」に!5評価されます。0したがって、0 && 3も偽です。C の論理演算子

C# では、この点で型システムが少し強力です。この!演算子boolは、整数型から完全に独立した type の値に対してのみ機能します。見てください!C# の演算子

于 2010-03-05T16:47:10.163 に答える
2

この C コードに相当するコード

#include<stdio.h> 
int main() 
{ 
    int j=3,k; 
    k=!5&&j; 
    printf("%d",k); 
    return 0; 
}

C#では

class Program {
static int Main() 
{ 
    int j=3, k; 
    k = !(5 != 0) && (j != 0) ? 1 : 0; 
    Console.WriteLine("{0}", k); 
    return 0; 
}
}

C# では int でブール論理演算子を使用できないことに注意してください。int を bool に変換する場合は、ここにあるように、そのためのコードを作成する必要があります。

5 は 0 と等しくないため、どちらのプログラムも正しくゼロを出力します。したがって、!5 (C) または !(5!=0) (C#) は false です。C では、false はゼロに変換されます。C# では、条件演算子の代替はゼロを返します。

それはあなたの質問に答えていますか?

于 2010-03-05T17:15:23.793 に答える
2

読み取り可能な C コード: コンパイルして実行し、式がどのように評価されるか。

#include <stdio.h>
int main() {
        int j = 3, k;
        k = !5 && j;

        printf("!5 = %d \n", !5);
        printf("j = %d \n", j);
        printf("!5 && j = %d \n", !5 && j);
        printf("k = %d \n",k);

        return 0;
}

おそらく「!」を適用することはできません。この方法で C# の int に変換します。intで「〜」を使用することでそれを達成できると思います。「!」で応募できます。ブール値に変換します(C#でどのように呼び出されるかわかりません)。

于 2010-03-05T16:49:41.220 に答える
1

そして、どのように使用できますか ! C# の演算子。

それが論理否定演算子です。これを a の右側に置くとbool、反対になります。C# では、整数から への暗黙的な変換はありませんbool

ところで、C# の「同じコード」には異なる数値が含まれています。

于 2010-03-05T16:47:13.393 に答える
0

C#(およびJava)では、次のようなことができます

k = (4 == 0) && (j != 0);

C プログラムと同じ動作が得られます。整数を 0 と比較すると、C と同じ「ロジック」が得られます。

于 2010-03-05T18:04:50.227 に答える
0

論理 NOT を実行しようとしています。C# では int に対してビット単位の NOT を実行する必要があります (! ではなく ~ 演算子)。ここを参照してください:

http://msdn.microsoft.com/en-us/library/d2bd4x66(VS.71).aspx

于 2010-03-05T16:46:55.253 に答える
-1

単純なブール演算ではなくビット演算を行いたい場合は、C コードで間違った演算子が使用されています。正しい演算子のサンプル リンクを次に示します。

現在の C コードでは、k=!5&&j, 5 は true と見なされるため、!5 は 0 (false) です。次に j と AND しますが、任意のブール値と AND をとった false は false なので、0 になります。

あなたはおそらく (tilda5)&j のようなものが欲しいでしょう

于 2010-03-05T16:45:32.743 に答える