>"-6ren"> >"-我在将一些 Pascal 代码翻译成 C 时遇到问题。基本上,我有嵌套循环,其中递增“k”的循环在递增“i”的循环内。在这两种情况下,我都想执行命令“如果我(右移)k AND 1 = 1,则执行以下 -6ren">
gpt4 book ai didi

将 Pascal 的 "shr"转换为 C 的 ">>"

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:55 24 4
gpt4 key购买 nike

我在将一些 Pascal 代码翻译成 C 时遇到问题。基本上,我有嵌套循环,其中递增“k”的循环在递增“i”的循环内。在这两种情况下,我都想执行命令“如果我(右移)k AND 1 = 1,则执行以下 {code}”。在 Pascal 中我有:

{Pascal Code}
...
for i:=0 to N-1 do begin j:=0; temp:=N/2;
for k:=0 to P-1 do begin if ((i shr k) and 1)=1 then...

我知道这行得通。我已经绘制了 Pascal 代码中的数据并且它是正确的,所以我假设这个算法是我想在 C 中复制的。在 C 中我有:

/*C code*/
...
int i;
unsigned int k;
for(i=0;i<N;i++){
j=0;
temp=N/2;
for(k=0;k<P;k++){
if((unsigned int)i)>>k&&1==1){
/*do code*/
}

在调试这些行时,我正在写入显示 Pascal 的“i shr k”和 C 的“i>>k”的值的文件。每个文件的前几行是:

Pascal's "i shr k":
0
0
0
0
0
0
0
0
0
1...

我对“i>>k”的 C 结果是:

C's "i>>k":
1
2
1
3
1
4
2
1
5
2...

我还发现,在 Pascal 版本中,对于 i 的给定值,对“if”语句内部的访问要多得多。知道这里发生了什么吗?我知道 Pascal 的“shr”是逻辑移位而 C 的“>>”是算术移位,但我认为将 (unsigned int) 类型转换放在“>>”的左操作数前面会解决这个问题吗?有人对如何使我的 C 语句等同于 Pascal 语句有任何建议吗?将不胜感激!

感谢阅读!

最佳答案

您的问题似乎与运算符优先级有关。

在 Pascal 版本中,你的条件是这样的:

((i shr k) and 1)=1

在 C 版本中,您的条件是这样的(添加了一些括号以显示优先级):

(i >> k) && (1==1)

此外,&& 是逻辑运算符,而不是按位运算符。等效的按位运算符是 &。如果你添加一些括号和开关运算符,你应该得到你想要的:

((i >> k ) & 1) == 1

关于将 Pascal 的 "shr"转换为 C 的 ">>",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24347416/

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