gpt4 book ai didi

java - 使用位运算符 JAVA 交换 int[][] 数组中每行/列的顶部和底部 2 位

转载 作者:行者123 更新时间:2023-11-30 08:01:17 24 4
gpt4 key购买 nike

我需要获取一些数组,并将每个[行][列]的底部 2 位与顶部 2 位交换,我很迷失。我在这里找到了一个类似的线程,其中包含这段代码:

for (int row = 0; row < height; row++) {
for (int col = 0; col < width; col++) {

int pic = image[row][col];
int top = (pic & 0b11110000) >> 2;
int bottom = (pic & 0b00001111) << 2;
pic = top | bottom;
image[row][col] = pic;
}
}

它似乎几乎可以工作,但不太正确。另外,我根本不理解这部分:0b00001111。

我发现代码 here ,该线程似乎与我正在处理的问题完全相同......就像包括其他代码一样。我得到的指示是:<​​/p>

“调用交换可恢复图像,其中每个像素已通过交换底部 2 位与顶部 2 位进行置乱。为此,您的代码需要执行相同的交换来恢复图像。注意:像素的最大值 (Picture.MAXVAL) 为 255,因此每个像素只有 8 位有效。这些编号为位 0-7,其中位 0 等于 1,位 7 等于 128。不允许有负值。”

最佳答案

我认为这就是您想要的,看来您正在混淆位和字节。一个整数是4个字节,也就是32位。

for (int row = 0; row < height; row++) {
for (int col = 0; col < width; col++) {
int mask = 0b11111111_11111111_00000000_00000000;

int pic = image[row][col];
int top = (pic & mask ) >> 16;
int bottom = (pic & ~mask) << 16;
pic = top | bottom;
image[row][col] = pic;
}
}
<小时/>

如果您确实想将顶部 2 位与底部交换

for (int row = 0; row < height; row++) {
for (int col = 0; col < width; col++) {
int maskTop = 0b11000000_00000000_00000000_00000000;
int maskBottom = 0b00000000_00000000_00000000_00000011;
int pic = image[row][col];
int top = (pic & maskTop) >> 30;
int bottom = (pic & maskBottom) << 30;
pic = top | bottom | (image[row][col]&~(maskTop+maskBottom));
image[row][col] = pic;
}
}

我还没有测试过其中任何一个,但它们看起来都是正确的。

关于java - 使用位运算符 JAVA 交换 int[][] 数组中每行/列的顶部和底部 2 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31880574/

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