gpt4 book ai didi

c - 如何在二维数组中移动位

转载 作者:行者123 更新时间:2023-11-30 19:29:49 25 4
gpt4 key购买 nike

假设我的 c: 代码中有这个二维数组

unsigned short testing[5][3];

然后我将数据插入其中,并让我们监控

testing[0][0] = 00110010;
testing[0][1] = 01101001;
testing[0][2] = 11100001;

实际上,如果我们监视数组的第一个下标(使用调试工具进行监视)

testing[0] = 001100100110100111100001; /*which is combination of 3 second subscript of the array*/

问题是如何将 2D 数组向左移动 1 位

假设我希望得到这个输出

Original :
testing[0][0-2] = 001100100110100111100001;
The output I wish :
testing[0][0-2] = 011001001101001111000010;

我的方法尚未完成,但我认为有另一种明智的方法可以在此处询问

for(int i = 0; i<5; i++)
{
for(int j = 0; j < 3; j++)
{
testing[i][j] <<= 1;
/*I believe here will cause the padding first bit disappear also*/
}
}

如果在普通数组(或者你可以说一维数组)中,我知道可以通过

轻松完成
int a[2];
a[0] <<= 1;

但是在二维数组中,任何人都可以提出建议,也许有一些简单的方法来移动第一个下标的位?

为了清楚起见,我总结了我的问题,有没有办法移动二维数组的第一个下标

最佳答案

作为开场白,在这样的时刻,我希望 C 支持 8080/Z80 上存在的一些位操作,并且可能在 x86 上也可用。特别是,使用 Z80 说法的 RLC 指令。

与OP问题的相关性是,RLC是专门为解决这个问题而设计的:移位/旋转多字节值。牢记这一点,您可以使用 C 中提供的操作获得相同的结果。只是需要多花一点功夫。

void arrayshift(unsigned short *array, size_t elementCount)
{
int carry = 0;
size_t i;
for (i = 0; i < elementCount; i++)
{
// This assumes 8 bit bytes and sizeof(short) == 2. Adjust as needed if this is not the case
int newCarry = *array >> 15;
*array = *array << 1 | carry;
carry = newCarry;
array++;
}
}

总而言之,如果您的编译器支持它并且您愿意放弃可移植性,您可以返回到汇编程序并尝试使用 objective-c PU 上可用的指令来有效地完成此操作。

这是必须根据具体情况做出的决定,因此我只会将其列为可能的选项,而不是答案。

关于c - 如何在二维数组中移动位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52308939/

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