C布尔逻辑

时间:2010-03-05 16:40:22

标签: c# c boolean-logic

我一直在尝试使用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#..... 请帮助......

8 个答案:

答案 0 :(得分:9)

5当被​​解释为布尔值时为true,因此!5给出布尔结果为false,这导致&&也给出false。虚假解释为int0

答案 1 :(得分:8)

在C中,任何非零值(例如5)都被视为“true”,因此!5的计算结果为0或“false”。因此,0 && 3也是假的。 Logical operators in C

在C#中,类型系统在这方面稍强一些。 !运算符仅适用于bool类型的值,它完全独立于整数类型。请参阅! Operator in C#

答案 2 :(得分: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上使用“〜”来实现。 你可以“!”到布尔值(我不知道它是如何在C#中调用的)。

答案 3 :(得分: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转换为bools,那么你必须编写代码才能做到这一点,就像我在这里一样。

两个程序都正确地输出零,因为5不等于0,因此!5(C)或!(5!= 0)(C#)为假。在C中,false转换为零。在C#中,条件运算符的替代值为零。

这会回答你的问题吗?

答案 4 :(得分:1)

  

我该如何使用! c#中的运算符。

这是逻辑非运算符。你把它放在bool的右边,它会产生相反的结果。在C#中,没有从整数到bool的隐式转换。

顺便说一下,C#中的“相同代码”中有不同的数字值!

答案 5 :(得分:0)

你正试图做一个合乎逻辑的NOT。你必须在C#中对一个int做一个按位(不是〜运算符,不是!)。见这里:

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

答案 6 :(得分:0)

在C#(和Java)中,您可以执行类似

的操作
k = (4 == 0) && (j != 0);

获得与C程序相同的行为。将整数与0进行比较会得到与C相同的“逻辑”。

答案 7 :(得分:-1)

如果你想进行位算术而不是简单的布尔算术,你的C代码使用错误的运算符。这是一个sample link,其中包含正确的运算符。

在你当前的C代码中,k =!5&amp;&amp; j,5被认为是真的,所以!5是0(假)。然后用j对它进行AND运算,但任何带有任何布尔值的假AND运算都是假的,所以得到0。

你可能想要像(tilda5)&amp; j

这样的东西