gpt4 book ai didi

c - 需要 C 语言的简单帮助

转载 作者:行者123 更新时间:2023-11-30 21:48:32 25 4
gpt4 key购买 nike

谁能告诉我这段代码是如何工作的?

int Calc(int *arr, int m)

int result;
for (result &= 0; m; (arr[--m] & (0x1 << 0x1F)) ? result += arr[m]: Void());
return result;

我无法理解for循环:/

最佳答案

你在哪里找到这个代码 以便我可以追捕那个人并用 Schildt 的副本击败他

你不理解循环也就不足为奇了;它不是为了易于理解而编写的。这种代码唯一可接受的地方是 IOCCC ,但对于该竞赛来说,它的混淆程度不够

依次取每一位:

result &= 0;

是一种真正时髦的初始化方式 result0 ;它是 result = result & 0 的简写,它执行 result 的按位与反对0 (给出 0 )并将结果分配回 result 。它也是不安全的,因为未初始化的对象可能包含陷阱表示。 应该简单地写成 result = 0

m;

仅检查 m 的当前值;循环将一直运行到 0。循环基本上从最后一个元素开始,一直向下到第一个元素。

(arr[--m] & (0x1 << 0x1F)) ? result += arr[m]: Void()

呃。因此,它所做的第一件事就是获取索引 m-1 处的数组值。并执行按位 and反对0x1 << 0x1F (1 左移 31 个位置,或者本质上 0x80000000 );如果此操作的结果非零,则我们将该数组元素的值添加到 result ,否则我们会执行一些极其不恰当的命名函数,希望返回 0 1。鉴于我们正在处理有符号整数,并且在大多数平台上 int是 32 位宽,这段代码显然将 result 中的值相加。 。

一种稍微理智的写作方式是

result = 0;
while ( m ) // or m != 0, or m > 0, whatever you prefer
{
if ( arr[--m] < 0 )
result += arr[m];
}

<小时/> 1.条件运算符?:并不意味着用作这样的控制结构。语法为<em>expr1</em> ? <em>expr2</em> : <em>expr3</em> 。第一,<em>expr1</em>进行评估并应用所有副作用;如果结果为非零值,则表达式的结果为 <em>expr2</em> ;否则,结果为<em>expr3</em> .

关于c - 需要 C 语言的简单帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33311716/

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