我有一位byte
(總是在最低位置),我想反轉1位。 即給00000001我想獲得00000000和00000000與我想00000001在C#中反轉1位#
我解決了它這樣的:
bit > 0 ? 0 : 1;
我很好奇,看看還有別的工作要做。
我有一位byte
(總是在最低位置),我想反轉1位。 即給00000001我想獲得00000000和00000000與我想00000001在C#中反轉1位#
我解決了它這樣的:
bit > 0 ? 0 : 1;
我很好奇,看看還有別的工作要做。
如何:
bit ^= 1;
這只是XOR的第一位爲1,其切換它。
如果你想翻轉位#N,從0右側朝7左側計數(以字節爲單位),你可以使用這個表達式:
bit ^= (1 << N);
這不會干擾任何其他位,但如果該值永遠只能將是0或1十進制值(即所有其它位爲0。),則以下可以用作良好:
bit = 1 - bit;
同樣,如果只有要設置一位,可以使用與第一個位相同的值來反轉位#N:
bit = (1 << N) - bit;
當然,在這一點上,你實際上並沒有在同一意義上進行位操作。
你擁有的表達也很好,但是也會操縱整個值。
另外,如果你曾表示單個位爲bool
值,你可以這樣做:
bit = !bit;
來回切換值。
更多笑話的: 當然,「enterprisey」的方式是使用一個查找表:
byte[] bitTranslations = new byte[256];
bitTranslations[0] = 1;
bitTranslations[1] = 0;
bit = bitTranslations[bit];
您的解決方案是不正確的,因爲如果位== 2 (10),那麼你的任務將產生位== 0(00)。
這是你想要什麼:
bit ^= 1;
你是對的,但我已經把位移到了最低位,所以這對我來說不是問題 – 2010-04-09 08:20:21
如果你所要做的只是測試/操縱那一點,你可以擺脫這種轉變操作,只是用一個不同的常量對其進行異或(例如,如果它是第7個最重要的位,則執行類似bit^= 0x40的操作;) – par 2010-04-09 08:24:34
這具有不需要第一位的優勢首先選擇,也是如此。 – 2010-04-09 08:17:09
我第一次想用!但後來發現它只適用於布爾。有趣的東西,在這個級別工作。 – 2010-04-09 08:18:38
我想說'表達它作爲一個布爾'的論點 - 取決於你在做什麼,可能會使代碼更容易閱讀下一個要維護的人。 – Paddy 2010-04-09 08:19:12