我有這個整數int nine = 9;
它在二進制中是1001
。有沒有簡單的方法反轉它,所以我可以得到0110
?一種反轉整數變量二進制值的方法
回答
與使用111111 XOR ....
var inverted = a^int.MinValue
這對於負數不起作用,假設您的意思是int.MaxValue。 –
答:據我所知,'a^int.MaxValue'翻轉31位,其中有32位在int中。實際上,每一個整數都是錯誤的,不僅僅是負數,我只是因爲它是位32,它告訴你數字的符號,這是錯誤的事實而感到困惑。我認爲,正確的是'a^int.MinValue'。 –
謝謝,你正確 – sh1ng
int notnine = ~nine;
如果你擔心只有最後一個字節:
int notnine = ~nine & 0x000000FF;
如果你只是在最後四位感興趣:
int notnine = ~nine & 0x0000000F;
的~ operator是按位否定,而掩碼只給出你所關心的字節/半字節。
如果你真的有興趣的只有最後四位,該最簡單的就是:
int notnine = 15 - nine;
作品,每四位。 :-)
如果我們考慮到9這樣一個整數:
00000000000000000000000000001001
,你想有:
00000000000000000000000000000110
代替:
11111111111111111111111111110110
,做護理大約比上一個半字節要多(例如也想處理128903)。
然後你就可以創建模板,並將其應用:
uint value = 9; //or try 1290320
uint mask = 0;
for (int i = 1; i <= 16; i *= 2)
mask |= mask >> i;
value = mask & (~value);
你可以使用http://en.wikipedia.org/wiki/Find_first_set修改後的版本,或使用BSF ASM指令加速此。
這個問題沒有完全指定 - 你只關心4位,還是應該根據輸入的有效位數來調整?如果是後者,則需要一些複雜的位操作來屏蔽高位。
我稍微修改Bit Twiddling Hack來創建掩碼。
int mask = num;
mask |= mask >> 1;
mask |= mask >> 2;
mask |= mask >> 4;
mask |= mask >> 8;
mask |= mask >> 16;
int inverse = ~num & mask;
看到它在行動:http://ideone.com/pEqwwM
1)要翻轉
mask = (1<<n) - 1
2)最後n位創建一個口罩使用XOR
a^mask
另外,如果你想從二進制表示的第一個開始翻轉位,你可以這樣做
n = 0; while ((1<<n) <= a) n++;
- 1. 二進制反轉
- 2. 使用二進制將整數轉換爲過量表示法
- 3. 二進制變量變量
- 4. 將二進制整數向量轉換爲向量位數
- 5. 如何反轉二進制數?
- 6. 將整數轉換爲32位二進制 - 輸出反向
- 7. 整數二進制
- 8. 將整數轉換爲二進制/十進制的MIPS函數?
- 9. 將二進制轉換爲整數
- 10. 轉換與數字和NA值的向量與二進制值
- 11. 將變量的值從一種方法傳遞到另一種方法
- 12. 如何獲得一個二進制數的反轉(不補全或反轉)
- 13. 將整數轉換爲二進制返回錯誤的值
- 14. 在裝配(pep8)中將Int轉換爲二進制 - 一種優雅的方法
- 15. 將二進制值解釋爲整數
- 16. C++將十進制值作爲用布爾值數組表示的二進制整數的方法
- 17. 反向二進制數字
- 18. 二進制相反數
- 19. SystemVerilog:如何將二進制向量轉換爲整數
- 20. 如何將整數轉換爲二進制向量?
- 21. 有沒有一種算法來手動將二進制的十六進制補碼轉換爲十進制數?
- 22. OTX - 二進制方法偏移量
- 23. 將1和0的數組轉換爲二進制變量
- 24. 如何使用返回方法將整數轉換爲二進制數字?
- 25. 通過一種方法調用可變數量的方法
- 26. 是否有另一種方法比系統()執行二進制
- 27. 使用整數的二進制編碼的十進制加法
- 28. 在控制器中將變量的值從一種方法傳遞到另一種方法
- 29. 如何將二進制轉換爲十進制與長整數?
- 30. 轉換十進制整數爲4位二進制
C#中的** int ** 9不是'1001'。提示:它超過4位。 – mbeckish
只是爲了給mbeckish的提示'int 9'的答案是'0000 0000 0000 1001',所以如果你「反轉9」,會給你'1111 1111 1111 0110' –
@neoistheone今天萬聖節的精神不是嗎? – Servy