Raf*_*fay 18 c# java logic logical-operators
我在面试中被问了一个问题,如果提供0则返回1并且如果提供1而不使用条件则返回0,即if,ternary等
只是为了给你和想法下面的代码没有if:
public int testMethod(int value){
if(value==0) return 1;
if(value==1) return 0;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
更新: 虽然@ Usagi的答案似乎最适合我写的代码..但重新考虑我重新分析答案的问题.. @ Sergio的答案似乎是最简单和最合适的..
Usa*_*oto 26
public int testMethod(int value) {
return 1 - (value % 2); // or 1 - (value & 1)
}
Run Code Online (Sandbox Code Playgroud)
这可以用来在任何值和0之间切换,EG 3:
public int testMethod3(int value) {
return 3 - (value % 4);
}
Run Code Online (Sandbox Code Playgroud)
并且只是为了覆盖return 0问题中样本的末尾:
private static final int[] VALUES = { 1, 0 };
public int testMethod(int value) {
try {
return VALUES[value];
} catch (ArrayIndexOutOfBoundsException ex) {
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 23
我们可以在这里使用xor运算符.Xor是"exclusive或",当有两个或零时返回0,如果只有一个则返回1.它在整数的每个位上执行此操作.
因此,例如,二进制1001 ^ 1000 = 0001作为第一位有两个1,所以0,接下来的两个没有1,所以为零,最后一位只有一个1,输出1.
public int testMethod(int value){
return value ^ 1;
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*sch 13
我原来的答案
public int TestMethod(int value)
{
return Convert.ToInt32(!Convert.ToBoolean(value));
}
Run Code Online (Sandbox Code Playgroud)
以及@The Photon建议的修改过的
public int TestMethod(int value)
{
return Convert.ToInt32(value == 0);
}
Run Code Online (Sandbox Code Playgroud)
一种不同的方法是基于整数除法的行为C#并避免使用异常处理.
public int TestMethod(int value)
{
return 1 / ((10 * value) + 1);
}
Run Code Online (Sandbox Code Playgroud)
这三种方法都会返回相同的结果:
In | Out
-2 | 0
-1 | 0
0 | 1
1 | 0
2 | 0
Run Code Online (Sandbox Code Playgroud)
您可以像这样使用按位运算符:
value ^ 1
Run Code Online (Sandbox Code Playgroud)
^是按位XOR运算符,"如果在一个操作数中设置但不在两个操作数中,则复制该位".以位为单位表示1和0如下:
1 = 0000 0001
0 = 0000 0000
所以当value = 1时你最终会这样做:
1 ^ 1 =(0000 0001)^(0000 0001)= 0000 0000 = 0因为它们共享相同的比特,所以没有比特被复制.
现在,如果value = 0,你最终会这样做:
0 ^ 1 =(0000 0000)^(0000 0001)= 0000 0001 = 1,因为其中一个操作数中的最后一位为1,而另一个操作数中为0.