gpt4 book ai didi

java - 从图像获取/设置位值

转载 作者:行者123 更新时间:2023-12-01 23:15:13 24 4
gpt4 key购买 nike

问题基于此site .

有人可以解释一下这些行的含义吗:

private int getBitValue(int n, int location) {
int v = n & (int) Math.round(Math.pow(2, location));
return v==0?0:1;
}

private int setBitValue(int n, int location, int bit) {
int toggle = (int) Math.pow(2, location), bv = getBitValue(n, location);
if(bv == bit)
return n;
if(bv == 0 && bit == 1)
n |= toggle;
else if(bv == 1 && bit == 0)
n ^= toggle;
return n;
}

最佳答案

  int v = n & (int) Math.round(Math.pow(2, location));

Math.pow(2, location) 2 的给定次方。将其四舍五入并转换为整数。在二进制中,如果 location==0 则为 00000001 , 00000010 如果 location==1 , 00000100 如果 location==2等等(更好的是 1 << location ,它将“1”移动一定数量的位,在右侧填充 0 位。使用 Math.pow 可能会在每次调用时尝试计算 2 的对数。 )

n & ...是按位与。由于右侧的项目仅设置了一位,因此效果是将 n 中的每一位清零。除了那一位,并将结果放入 v 。这意味着v如果 n 中的一位为 0,则该位为 0 ,如果该位是 `,则为 0 以外的值,这意味着

  return v==0?0:1;

如果该位已清除,则返回 0;如果已设置,则返回 1。

int toggle = (int) Math.pow(2, location), bv = getBitValue(n, location);

toggle设置为Math.pow我已经描述过的事情。 bv设置为 n 中已有的位,即 0 或 1。如果这等于您设置的值,那么我们不需要对 n 执行任何操作:

if(bv == bit)
return n;

否则,我们需要将其设置为 1(请记住 toggle 将仅设置一位)。 n |= togglen = n | toggle 相同。 |是按位或,因此将在 n 中设置一位以及 n 中的所有其他位将保持不变”

if(bv == 0 && bit == 1)
n |= toggle;

或者我们需要将该位设置为 0。 n ^= togglen = n ^ toggle 相同。 n是异或。如果我们到达这里,那么 n 中的位为 1,toggle 中的位是 1,我们要设置 n 中的位为 0,因此异或会将该位更改为 0,同时保持所有其他位相同:

else if(bv == 1 && bit == 0)
n ^= toggle;

关于java - 从图像获取/设置位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21344280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com