我開始使用termcap,我看到了這種操作。C中的這個操作是什麼?
term.c_lflag &= ~(ICANON);
我知道&=
是binary AND
,我不是很舒適吧。
爲什麼不簡單地使用=
或製作#define
以及&= ~
是做什麼的?
我開始使用termcap,我看到了這種操作。C中的這個操作是什麼?
term.c_lflag &= ~(ICANON);
我知道&=
是binary AND
,我不是很舒適吧。
爲什麼不簡單地使用=
或製作#define
以及&= ~
是做什麼的?
假設ICANON
是位掩碼,即具有設置爲代表的一些特徵比特的整數,該語句將確保那些位都在c_lflag
不集。
這通常被稱爲「遮蔽」這些位。 (~
是按位逆)。
因此,如果的c_lflag
值是3(二進制11 )的操作之前,並ICANON
具有值2(二進制10 ),它將成爲1,因爲它是按位與:編帶值爲~2
,它的所有位都設置爲除位號1(二進制... 11101 )。
它也可以寫得更冗餘的
term.c_lflag = term.c_lflag & ~ICANON;
不應該需要圍繞ICANON
括號。
@Olaf我不是在說''',而是'〜'...... – unwind
你的線從term.c_lflag
除去的ICANON
位(多個):
假設術語頃4位長,如果ICANON
值4(0100B),那麼~ICANON
的值是11(1011B),等:
term.c_lflag 1 1 1 0
AND ~ICANON 1 0 1 1
---------------------
1 0 1 0
==> 1010B,10十進制
term.c_lflag &= ~(ICANON);
等於
term.c_lflag = term.c_lflag & ~(ICANON);
&和〜運營商是兩個不同的運營商。 〜不是操作符,它將每個位與其反轉換。 &運算符是按位AND運算符,在該運算符中它逐位比較操作數。
這不等於。評估左值時存在細微的差異。 – Olaf
爲什麼人們不願意? –
也許是因爲您會通過搜索「c運營商」或任何C書籍,教程等來找到答案。 – Olaf
我做到了!我看,我發現了一些......但我不明白爲什麼所有這些都與termcap有關! –