0
A
回答
0
位運算是你在找什麼。我相信有更高效的實現,但我只是在這個答案中說明了一點。
我要去代表使用字節在Java中位浪費空間:
//11010101 has a value of -43 because bytes are signed by Java
//MSB
byte bit1 = 1;
byte bit2 = 1;
byte bit3 = 0;
byte bit4 = 1;
byte bit5 = 0;
byte bit6 = 1;
byte bit7 = 0;
byte bit8 = 1;
//LSB
即使我只設置爲0或1至我字節的值,Java是使用8位來存儲他們。這意味着,在存儲器中,我的bit1
值佔用的空間1個字節(2個半位元):
0 0 0 0 0 0 0 1
我可以「移」通過使用按位移位運算該值達到在該空間中。有兩種口味,上下。我將通過一個換檔我的位向上:
bit1 << 1;
即轉移的整數bit1
的位向上通過一個(加入零到在存儲器中的最低位)像這樣,
0 0 0 0 0 0 1 0
的bit1
的十進制值現在是2!我們現在有了一個工具,我們需要將一個值轉移到它在字節中的位置,我們只需要移動我們的每個位,並使用「|」將它們逐位「或」運營商:
byte myByte = 0;
myByte = (byte)((bit1 << 8) | (bit2 << 7) | (bit3 << 6) | (bit4 << 5) | (bit5 << 4) | (bit6 << 3) | (bit7 << 2) | (bit8 << 1) | bit8);
我一定要投的變化和按位OR值的結果爲byte確保我的結果的正確格式。 myByte
現在看起來是這樣的記憶:
1 1 0 1 0 1 0 1
在小數的這個字節的值是-43,因爲字節在Java中籤署。你可以用2的讚美來手工檢查。
現在,要設置您的字節的第一位,您只需使用按位與與面具!
myByte = (byte)(myByte & 0b11111110);
myByte
的十進制值現在是-44。
0
需要先檢查第n位爲1或0,如果它是1,那麼它變成0。
if(number & (1 << (n-1)){
number &= ~(1 << (n-1));
0
在java中,字節是簽名型,所以其值可以是間-128和127.數據以二進制補碼形式存儲,這意味着第一個(最重要的)位/數字指示數字是負數(1)還是非負數(0)。欲瞭解更多信息,請閱讀此:https://en.wikipedia.org/wiki/Two%27s_complement
所以,你可以
byte myByte = 111;
myByte = (byte)(myByte + 128);
第二種方法是使用XOR操作只需添加128到它的第一位。此代碼應該這樣做:
byte myByte = 111;
myByte = myByte^0x80;
相關問題
- 1. PHP設置檢查錯誤(已改爲0到-1)
- 2. 更新行=行 - 1行設置爲0
- 3. Numpy:檢查數組中的某個位是否設置爲1或0?
- 4. SQL - 更改NULL值設置爲0
- 5. C++矢量位置設置爲1而不是0
- 6. 甚至設置爲0,奇數設置爲1
- 7. 問題與重採樣和真/假被設置爲1或0
- 8. WCFstreaming問題,當設置位置爲0
- 9. 轉換設置爲numpy 0-1數組?
- 10. DbContext AutoDetectChangesEnabled設置爲false檢測更改
- 11. 設置若干小數點後4位爲1或0
- 12. 如何將最後(最低)0位設置爲1
- 13. PHP PDO錯誤,值被設置爲0
- 14. 檢查不爲0的小數位數
- 15. 檢查某位置的位是否爲1
- 16. 數學表達式以檢查值是否從1更改爲0
- 17. 更改GPS位置爲Android
- 18. 如何在AS3中將按鈕從0更改爲1並將其從1更改爲0
- 19. angularjs:檢查url位置更改
- 20. 檢查/更改背景位置
- 21. 爲什麼EFLAGS位1始終設置?
- 22. 將某個位設置爲1 matlab
- 23. 更改CSS設置更改爲
- 24. 爲什麼!x將1和0更改爲true/false
- 25. 更改位置設置
- 26. PDO更新設置字段值爲0?
- 27. Android設置按鈕在設置爲alpha 0之後被禁用
- 28. PHP更新設置全部爲0,但對於某些編號爲1
- 29. 日曆小時數設置爲0,但顯示1,爲什麼?
- 30. 在後臺更新位置並檢查位置設置
[本文可能會幫助您在正確的方向。](http://stackoverflow.com/q/12015598/2650847) –