[如何使用〜運營商]如何在C中使用逆
我有一個結構說Alpha
。我知道Alpha
(如a
)中的元素的值,它可以是0
或1
- 我想讓同一結構的其他元素取反Alpha.a的值。例如:
if Alpha.a = 1
then Alpha.b = 0
,反之亦然
我曾嘗試:
Alpha.b = ~ (Alpha.a)
但遺憾的是它不工作 - 當Alpha.a
是1
,Alpha.b
被設置爲254
任何想法?
感謝和問候,
SamPrat
[如何使用〜運營商]如何在C中使用逆
我有一個結構說Alpha
。我知道Alpha
(如a
)中的元素的值,它可以是0
或1
- 我想讓同一結構的其他元素取反Alpha.a的值。例如:
if Alpha.a = 1
then Alpha.b = 0
,反之亦然
我曾嘗試:
Alpha.b = ~ (Alpha.a)
但遺憾的是它不工作 - 當Alpha.a
是1
,Alpha.b
被設置爲254
任何想法?
感謝和問候,
SamPrat
~
運算符否定每個單獨的位。例如,假設Alpha.a
是unsigned char
。然後~1
會以二進制形式讀取〜00000001,結果將是11111110(再次,二進制),它與十進制中的254和十六進制中的0xFE相同。
正如其他人所建議的,使用!Alpha.a
或Alpha.a^1
。
在C中,true
由1表示,而false
由0表示。但是,在比較中,任何非假值都被處理爲真。
的!
操作者確實布爾反轉,所以!0爲1且!1是0。
的~
操作者,然而,確實按位反轉,其中在值的每一位被替換爲它逆。所以〜0是0xffffffff(-1)。 〜1是0xfffffffe(-2)。 (-1和-2都被認爲是真實的,這可能會讓你感到困惑。)
你想要的是!
,而不是~
。
您不能使用~
,因爲這會將00000000
轉換爲11111111
而不是00000001
,因爲我認爲您期待。
如果你有布爾變量可以使用:
Alpha.b = !(Alpha.a)
,但如果沒有,你可能需要使用的if/else邏輯:
if (Alpha.a == 0)
{
Alpha.b = 1;
}
else
{
Alpha.b = 0;
}
我可能試圖構建消息,所以如果在我的代碼的這個階段不推薦其他東西 – samprat
一個很好的跨平臺跨語言的解決這一常見問題是:
Alpha.b = 1 - Alpha.a;
怎麼樣的後操作位掩碼?
使用無符號的字符找位0:
b = 0x01u & (~a);
甚至
b = a^0x01u;
或者 「布爾思想家」(注意TRUE和FALSE可以從0/1不同,如果你想!它「真正的布爾」你應該如果定義了使用TRUE和FALSE)
b = (1 != a)?(0u):(1u);
乾杯
**它爲什麼不起作用?會發生什麼?** – SLaks
它顯示價值254 – samprat
嗨,大家好,我渴望知道爲什麼我的問題被拒絕投票,以便下一次我會解決我的錯誤? – samprat