C# C布尔逻辑

C# C布尔逻辑,c#,c,boolean-logic,C#,C,Boolean Logic,我一直在尝试一些C语言的程序,遇到了这个 #include<stdio.h> int main() { int j = 3, k; k= !5 && j; printf("%d", k); return 0; } 这将产生错误 (错误1运算符“!”不能应用于“int”类型的操作数C:\Documents and Settings\SANDEEP\My Documents\Visual Studio 2005\Projects\Cons

我一直在尝试一些C语言的程序,遇到了这个

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

(错误1运算符“!”不能应用于“int”类型的操作数C:\Documents and Settings\SANDEEP\My Documents\Visual Studio 2005\Projects\ConsoleApplication18\ConsoleApplication18\Program.cs 21 17 ConsoleApplication18)

我想知道为什么我的C代码输出不起作用,以及如何使用
运算符。

请帮助。

5
当解释为布尔值时为真,因此
!5
将布尔结果设为false,这将导致
&&
也设为false。False被解释为
int
is
0

如果要执行位运算而不是简单的布尔运算,则C代码使用了错误的运算符。下面是一个包含正确运算符的示例

在当前的C代码中,k=!5&&j,5被认为是正确的,所以!5是0(假)。然后用j和它,但是任何false和任何boolean都是false,所以得到0


您可能想要(tilda5)&j之类的东西,您正在尝试执行逻辑NOT。必须对C#中的int(不是~运算符)执行按位NOT运算。请看这里:


在C中,任何非零值,如
5
都被认为是“true”,因此
!5
计算为
0
,或“false”。因此,
0&&3
也是错误的

在C#中,类型系统在这方面稍强一些。
运算符仅对类型为
bool
的值起作用,该类型与整数类型完全无关。看

我怎么能用这个!c#中的运算符

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

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

可读的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;
}
#包括
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);
返回0;
}
您可能无法以这种方式将“!”应用于C#中的整数。我相信您可以通过在int上使用“~”来实现这一点。
您可以将“!”应用于布尔值(我不知道它在C#中是如何调用的)。

此C代码的等效代码

#include<stdio.h> 
int main() 
{ 
    int j=3,k; 
    k=!5&&j; 
    printf("%d",k); 
    return 0; 
}
请注意,C#不允许在int上使用布尔逻辑运算符。如果您想将int转换为bools,您必须编写代码来实现这一点,正如我在这里所做的那样

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

这回答了你的问题吗?

在C#(和Java)中,你可以做如下事情

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

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

C程序通过输出0正确运行。你希望它能做什么?回答你的第二个问题,c#(不像c)似乎不允许将整数视为布尔数。编辑此内容以消除大写字母锁定的叫喊……唉……听说过网络礼仪吗……请不要发短信——我们会说和读英语……@马丁:与流行的看法相反,C++编译器一般不能编译C代码;不过,这两种语言都有一个共同的子集,这使得编写代码成为可能,并且可以使用编译器对这两种语言进行编译languages@sandy101:当你问一个关于“不起作用”的问题时,你必须解释是什么让你相信它不起作用,以及你期望它如何起作用。您的C程序工作正常,这是应该的。因此,当您描述程序的正确行为并断言它“不工作”时。。。嗯,听起来像胡说八道。标题是C布尔逻辑,而不是C位运算。@fusbar标题是我编辑的。原始指定的仅为“逻辑”。+1;准确地说:任何非零标量值都被视为“真”,如果您真的想在C#中实现C逻辑not对数字的相同效果,只需使用number==0。
class Program {
static int Main() 
{ 
    int j=3, k; 
    k = !(5 != 0) && (j != 0) ? 1 : 0; 
    Console.WriteLine("{0}", k); 
    return 0; 
}
}
k = (4 == 0) && (j != 0);