gpt4 book ai didi

c - 异常情况 (* ((uint64_t *) buf) == NEG)

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:46 28 4
gpt4 key购买 nike

案例是我正在研究我在互联网上找到的引起我注意的代码,是这样的:

#include <stdio.h>
#include <stdint.h>
#define NEG ~0x0LL

void ITOC(int8_t *vec, int n)
{
int8_t *p = vec;
for(; n; n /= 10) *p++ = n % 10;
}

void ncmp(int8_t *buf, int y)
{
int tmp, i = 0;

for (; y ; y/=10)
{
tmp = y % 10;
for(i = 0; i < 8; i++)
if(buf[i] == tmp && buf[i] != -1)
{
buf[i] = -1;
break;
}
}
}
int main(void)
{
int8_t buf[8];
int y = 21 ,z = 60, n = 1260;
*((uint64_t*) buf) = NEG;

ITOC(buf, n);
ncmp(buf, y);
ncmp(buf, z);

if( *((uint64_t*) buf) == NEG )
printf("%d = %d * %d\n", n, y, z);

return 0;
}

这一行我不明白的部分:

if( *((uint64_t*) buf) == NEG )

如果变量有这些值:

y = 21 z = 60 n = 1260

条件为真,但如果这些值包含:

y = 18 z = 81 n = 1458

在这种情况下第一个位置buf是-1,如果if只比较第一个位置与NEG应该也为真。

谁能解释一下发生了什么?

最佳答案

我不知道您是从哪里找到这段代码的,但它肯定不会像您认为的那样工作。

您认为它所做的是检查某种乘法。可能是因为它在最后打印了“n = y * z”。但它实际上做的是获取 n 的数字,并删除 yz 的数字。如果所有数字都被删除,它会打印该消息。例如:

1111 = 11 * 11    true
1234 = 12 * 34 true
1500 = 10 * 50 true
1500 = 30 * 50 false
1458 = 18 * 81 false
1458 = 14 * 58 true
1458 = 45 * 18 true

关于c - 异常情况 (* ((uint64_t *) buf) == NEG),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27516773/

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