今天刷题的时候看到了 绘制直线 这道题,有需求是将
4294967295这个数,也就是二进制的32个1,转化为int型
11111111 11111111 11111111 11111111 -> -1
但如果直接转换, 像这样
(int)(Math.pow(2, 32) - 1)
结果是int类型的最大值,而不是-1
经过厕所,我发现这样可以达到想要的效果
(int)(long)(Math.pow(2, 32) - 1)
利用long类型来作为中间人来转换,结果就变成了-1。
后面附上这道题的链接,和我的解答。
绘制直线
class Solution {
public int[] drawLine(int length, int w, int x1, int x2, int y) {
int[] res = new int[length];
int r = w / 32 * y;
int r1 = x1 / 32 + r;
int r2 = x2 / 32 + r;
if (r1 == r2) {//表示他们在同一个数组中
res[r1] = (int)(long)(Math.pow(2, 32 - (x1 % 32)) - 1);
res[r1] &= ~(int)(long)(Math.pow(2, 32 - (x2 % 32) - 1) - 1);
} else {
res[r2] = (int)(long)(Math.pow(2, 32) - 1);
res[r2] &= ~(int)(long)(Math.pow(2, 32 - (x2 % 32) - 1) - 1);
res[r1] = (int)(long)(Math.pow(2, 32 - (x1 % 32)) - 1);
}
for (int i = r1 + 1; i < r2; i++) {
res[i] = -1;
}
return res;
}
}