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当解释为布尔值时为真,因此!5将布尔结果设为假,这&&也会导致为假。False 解释为intis 0

于 2010-03-05T16:44:28.003 回答
9

在 C 中,任何非零值,例如5被认为是“真”,因此!5评估为0或“假”。因此,0 && 3也是错误的。C 中的逻辑运算符

在 C# 中,类型系统在这方面要强一些。该!运算符仅适用于 type 的值bool,它完全独立于整数类型。看!C# 中的运算符

于 2010-03-05T16:47:10.163 回答
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# 中是如何调用的)。

于 2010-03-05T16:49:41.220 回答
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# 不允许在整数上使用布尔逻辑运算符。如果你想将整数转换为布尔值,你必须编写代码来做到这一点,就像我在这里一样。

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

这是否回答你的问题?

于 2010-03-05T17:15:23.793 回答
1

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

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

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

于 2010-03-05T16:47:13.393 回答
0

您正在尝试执行逻辑 NOT。您必须在 C# 中的 int 上按位执行 NOT(~ 运算符,而不是!)。看这里:

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

于 2010-03-05T16:46:55.253 回答
0

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

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

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

于 2010-03-05T18:04:50.227 回答
-1

如果您想做位算术而不是简单的布尔算术,那么您的 C 代码使用了错误的运算符。这是带有正确运算符的示例链接。

在您当前的 C 代码中,k=!5&&j, 5 被认为是真,所以 !5 是 0(假)。然后你用 j 与它,但任何与任何布尔值的假 AND 都是假的,所以你得到 0。

你可能想要像 (tilda5)&j 这样的东西

于 2010-03-05T16:45:32.743 回答