我一直在尝试使用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#..... 请帮助......
答案 0 :(得分:9)
5
当被解释为布尔值时为true,因此!5
给出布尔结果为false,这导致&&
也给出false。虚假解释为int
是0
。
答案 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
这样的东西