gpt4 book ai didi

c - 宏在计算其位后不会将预期值分配给变量

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

我需要编写一个宏 maxBitsOff 来计算两个变量中的所有零,然后确定哪个变量有更多的零并将其分配给结果变量。如果要比较的两个变量具有相同数量的零,则第一个变量将分配给结果。例如给定 maxBitsOff(a, b, result, z) 如果 a = 1b = 30 a肯定会赢,因为 1 中的零比 30 中的零多。所以我们将 a 分配给 result 并将零的数量分配给 z。经过几个小时的调试,我无法让宏工作。这是 C 中的代码:

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <limits.h>
#include "math.h"

#define ARR_LEN 8
#define maxBitsOff(a, b, result, z) { \
int acount = 0, bcount = 0, i; \
printf("sizeof(a) = %d\n", sizeof(a)); \
for(i = 0; i < 8 * sizeof(a); i++) { \
if(!(a & (1 << i))) { \
acount++; \
} \
if(!(b & (1 << i))) { \
bcount++; \
} \
} \
if(acount >= bcount) { \
result = a; \
z = acount; \
} else { \
result = b; \
z = bcount; \
} \
printf("result = %d\n", result); \
printf("z = %d\n", z); \
}

int main() {
int arr[ARR_LEN] = {120, 30, 40, 50, 60, 70, 80, 1};
int z, i, max = 0;
int result;

for(i = 0; i < ARR_LEN - 1; i++) {
maxBitsOff(arr[i], arr[i + 1], result, z);
if(max < result)
max = result;
}
return 0;
}

运行这段代码后,我得到了这些明显不好的结果:

结果 = 32767

z = 23

最佳答案

宏替换是文本替换

您在宏中使用变量 i,并将 arr[i] 作为参数传递。尝试在隐藏变量名称中使用下划线。此外,将 A 和 B args 存储在 block 内的临时存储中。

关于c - 宏在计算其位后不会将预期值分配给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42233298/

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