[问题] 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