2017-09-24 87 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

謝謝你的幫助。 –