gpt4 book ai didi

c - 为什么当存在正差异时 memcmp 返回负值?

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

#include <stdio.h>
#include <string.h>

int main()
{
int test1 = 8410092; // 0x8053EC
int test2 = 8404974; // 0x803FEE
char *t1 = ( char*) &test1;
char *t2 = (char*) &test2;
int ret2 = memcmp(t1,t2,4);

printf("%d",ret2);

}

这是一个非常基本的函数,运行时会打印 -2。也许我完全误解了 memcmp,但我想如果它返回第一个不同字节之间的差异。由于test1 比test2 大,打印的值不应该是正数吗?

我正在为 ubuntu 使用标准的 gcc.7 编译器。

最佳答案

正如评论中所指出的,memcmp() 运行字节比较。这是一个男人的引述

int memcmp(const void *s1, const void *s2, size_t n);

RETURN VALUE: The memcmp() function returns an integer less than, equal to, or greater than zero if the first n bytes of s1 is found, respectively, to be less than, to match, or be greater than the first n bytes of s2 For a nonzero return value, the sign is determined by the sign of the difference between the first pair of bytes (interpreted as unsigned char) that differ in s1 and s2. If n is zero, the return value is zero. http://man7.org/linux/man-pages/man3/memcmp.3.html

如果字节不相同,则差异的符号取决于目标字节顺序。

memcmp() 的一个应用是测试两个大型数组是否相同,这可能比编写逐个元素比较的循环更快。有关详细信息,请参阅此堆栈问题。 Why is memcmp so much faster than a for loop check?

关于c - 为什么当存在正差异时 memcmp 返回负值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53491037/

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