我制作了一个函数来获取每个大小为SIZ的NMEMB成员数组的最大值,并将每个成员与memcmp()进行比较。问题是,当比较有符号整数时,结果是不正确的,但同时也是正确的。下面是一个示例:
hexdump()只是一个调试函数,不会改变程序。
编译和执行输出时如下所示:
这是正确的,因为memcmp()比较一个字节字符串,而不关心类型或符号,所以-11 = 0xfffffff5是数组v[]中的最大字节字符串,但同时也是错误的,因为-11不是数组中的最大整数。
有没有办法用这个函数得到数组的最大整数?
发布于 2021-02-28 00:16:38
沿着qsort路线走下去,并需要一个自定义的比较器。注意,在这么简单的函数中绝对不需要动态内存分配:
发布于 2021-02-28 00:21:17
memcmp比较位置,并不关心标志。所以对于它,-11表示0xFFFFFFF5,-12表示0xFFFFFFF4,表示0xFFFE4DF4,数组中最大的数字198表示0x000000C6,其中,-11是最大的无符号数,它会为您返回。您不应该使用memcmp来比较有符号的数字。
发布于 2021-02-28 00:30:32
memcmp进行的所有内存比较都是无符号的,并且基于char大小的数组元素。当您将不同大小的signed int单元数组提供给它时,您的结果只能用于测试二进制表示的相等性,这意味着0或不同于0的结果表示相等或不相等,但不同于零的结果上的符号表示比较整数数组的各个字节,整数数组被分解为字节(在机器字符顺序体系结构中),其中一些字节将被签名并作为无符号进行比较,而其他字节将被签名并作为无符号进行比较。在机器字节序体系结构中,整数数组被分解为字节(在机器字符顺序体系结构中),其中一些字节将被签名并作为无符号进行比较,而其他字节将被签名并作为无符号进行比较。此外,整数中不同字节的重要性可能会影响排序顺序,因为字节从较低地址到较高地址进行比较,这仅在整数存储为unsigned并且(非常重要)以高字节顺序存储在存储器中的情况下才与体系结构字符顺序相匹配。如果你使用的可能是英特尔架构,那么使用英特尔架构正好相反。
https://stackoverflow.com/questions/66400731
复制相似问题