2017-09-24 90 views
-1

我是编程新手。我正在打印出一张真相表。它包含AND,OR,XOR,NOT。我完成了前三部分。但是当我试图编写“不”部分我从编译器得到一个错误“错误的操作数为int一元运算符(!)”。使用布尔变量在“1”和“0”中打印真值表

class oneandzero{ 
    public static void main (String [] args){ 
     boolean p,q; 
     int a,b; 
     System.out.println("P\tQ\tAND\tOR\tXOR\tNOT P\tNOT Q"); 
     p=false; q=false; 
     a=(p)?1:0; 
     b=(q)?1:0; 
     System.out.println(a+"\t"+b+"\t"+(a&b)+"\t"+(a|b)+"\t"+(a^b)+"\t"+(!a)+"\t"+(!b)); 
     p=false; q=true; 
     a=(p)?1:0; 
     b=(q)?1:0; 
     System.out.println(a+"\t"+b+"\t"+(a&b)+"\t"+(a|b)+"\t"+(a^b)+"\t"+(!a)+"\t"+(!b)); 
     p=true; q=false; 
     a=(p)?1:0; 
     b=(q)?1:0; 
     System.out.println(a+"\t"+b+"\t"+(a&b)+"\t"+(a|b)+"\t"+(a^b)+"\t"+(!a)+"\t"+(!b)); 
     p=true; q=true; 
     a=(p)?1:0; 
     b=(q)?1:0; 
     System.out.println(a+"\t"+b+"\t"+(a&b)+"\t"+(a|b)+"\t"+(a^b)+"\t"+(!a)+"\t"+(!b)); 
    } 
} 
+0

因为你只能使用NOT运算符,当你检查某些东西时[更大/更小/方程式/ condidtionsl]。你在int之前不能使用NOT运算符。 –

回答

2

逻辑NOT运算符!仅作用于布尔值:

!true == false 
!false == true 

你可能想按位NOT运算符~,它作用于整数:

~0b00000000 == 0b11111111 
~0b11111111 == 0b00000000 

// or for single bits, (~x & 1): 
~0 & 1 == 1 
~1 & 1 == 0 
+0

〜0 == 1是错误的,因为0000 0000是0的8位值,所以0的2s补数是-1。我的意思是〜0 == - 1和-1 == - 2 –

+0

@JayarajRohan你绝对正确,我在想单个位,但没有说清楚。我已经更新了我的答案,以更好地反映这一点。 – Frxstrem

+0

谢谢你的帮助。 –