2017-04-21 53 views
-1

我從Lazyfoo.net教程學習SDL,在「32_text_input_and_clipboard_handling」一章中,我無法理解下面的代碼是如何工作的。 (我發送的郵件lazyfoo聯絡人,但仍然在等待回覆)SDL/C++ &&運算符 - Lazyfoo教程

if(!((e.text.text[0] == 'c' || e.text.text[0] == 'C') && 
    (e.text.text[0] == 'v' || e.text.text[0] == 'V') && 
    SDL_GetModState() & KMOD_CTRL)) 
    { 
    //Append character 
    inputText += e.text.text; 
    renderText = true; 
    } 

這個代碼功能是忽略/檢查我們沒有得到一個CTRL和C/V的事件,它正在爲每教程,但如何? 這個代碼中有兩個「& &」運算符,這意味着必須滿足所有三個條件才能執行花括號內的代碼!

這意味着,將碼忽略

CTRL C和V按以下圖像

Image Link for Ctrl + C + v (Ctrl AND c AND v)

代替

CTRL和c/v爲根據以下圖片

Image Link for Ctrl + C/v (Ctrl AND c OR v)

但一些它是如何工作的,如C++/SDL CTRL和C/V ???

+0

如果否定。看看德摩根定理 –

+1

請問你的問題標題描述的問題,而不是僅僅列出的東西 –

+0

「ctrl和c/v」是什麼意思? –

回答

0

if語句使用!作爲否定,如果滿足所有三個條件,那麼布爾值將爲true,然而它將被否定爲false。同樣,當ctrl + c/v沒有被按下時,3個條件會返回一個布爾值false,這被否定爲true,從而允許執行if語句內的代碼。

如果你用英文寫這種情況下這將是:如果CTRL + C和Ctrl + V是按下。

+0

這就是我的困惑是,上面的代碼看起來像Ctrl + C和Ctrl + V然後它是否定的,所以我的疑問是,邏輯應該是Ctrl + C或Ctrl + V正確? – Macs