[問題] byte 值 -1 如何右移位元一位成為 127

作者: bleed1979 (十三)   2014-10-26 17:51:48
byte i = -1;
System.out.println(寫在這裡);
輸出為127,在禁止左移運算手動清除bit 7的情況下,how?
謝謝。
======================= 編輯分隔線 ===========================
目前推文仍沒有完善的方法。理由我想還是把故事交代一下。
此刻我的電腦正在跑 33 Queens puzzle,只需求出一個正確解。
33 Queens 的題目為 8 Queens 的延伸,
多一個條件且只需求一個正確解。
但姑且不論多出條件的內容為何,僅討論資料結構。
由於 8 Queens 的 8 在一個 int 的位元數之內,
所以很容易以位元運算來加速求解。
比如:
以 left 變數 代表左移一位的遮罩,
center 變數 代表中路的遮罩,
right 變數 代表右移一位的遮罩,
以 b 變數代表此列皇后擺放後已經設立起唯一一個bit的值。
4者皆為 int 變數。
於是乎
((left | b) << 1) | (center | b) | ((right | b) >> 1)
傳進入recursion,就是下一列皇后不可擺放的遮罩。
現在問題就出現在 ((right | b) >> 1) 的 >> 1 上面,
在不使用long資結情況下 ...
註:其實題目N Queens最高不超過1000,看你能給出最高多少的一個正確解。
我先取 N 為 13,並使用資結為 byte[] 的方式,
以array展開我所需要的 right 變數,
並定義了一個
class Row {
private int n;
private int sz;
private byte[] ary;
}
其中的一個shiftRight() method,代表右移一位的 method,
所以我只要
public Row shiftRight() {
Row row = new Row(n);
byte[] rowAry = row.getAry();
boolean carry = false; // 是否跨過邊界的借位
for(int i = sz - 1; i >= 0;
作者: psplay (亂世中一個小小書僮)   2014-10-26 19:08:00
JAVA板變成溫馨作業版了 讚
作者: bleed1979 (十三)   2014-10-26 19:23:00
我只想知道有沒可能辦到。
作者: ssccg (23)   2014-10-26 20:21:00
>>>
作者: pico2k (風月)   2014-10-26 21:08:00
1:(-1)&0x7f 2:(-1)>>>25
作者: cowbaying (是在靠北喔)   2014-10-27 11:03:00
有沒有考慮使用位元運算子?推文已經解答了 XDDD幫&
作者: bleed1979 (十三)   2014-10-27 12:21:00
加and手動清除多ㄧ次運算。但就是要省。

Links booklink

Contact Us: admin [ a t ] ucptt.com