c - 如何测试下面的代码?如果我为声明为 'unsigned int' 的变量提供有符号整数,会发生什么?

标签 c function pointers int

我想知道可用于“a”和“b”而不会出错的数字范围。(即输出也应该给出正确的值。)

#include <stdio.h>
#include <stdlib.h>

int sum(int * , int *);

int main()
{
unsigned int a= 10;
int b = -30,c;

c=sum(&a,&b);
printf("sum of %d and %d is %d",a,b,c);

return 0;
}

int sum(int *p , int *q)
{
return *p+*q;
};

我为变量“a”提供了一个有符号数,该数字被声明为无符号整数,为变量“b”提供了“-30”。我得到了大于-2147483618(-2147483617、-2147483616等)的值的正确输出。但我得到了 a=-2147483619 以后的正值。为什么会这样呢?请帮帮我。

最佳答案

我认为标准中没有定义无符号和有符号整数的内部表示。 (特别是因为即使“int”的大小也可能有所不同。)因此您的行为将是不确定的。它在特定系统上可能是一致的,但很可能不会转移到另一个系统/编译器。

关于c - 如何测试下面的代码?如果我为声明为 'unsigned int' 的变量提供有符号整数,会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29370623/

相关文章:

关于使用指针修改 const 变量的困惑

c++ - 使用 VMIME/libcurl 不通过服务器发送电子邮件(或 : SMTP server library)

c - 看似随机的 opendir() 失败 C

r - 根据 R 中的行索引计算滚动总和

function - Function.const 的目的是什么?

Mathematica 中的函数类型声明

c - 我无法理解教授关于 malloc 的代码

c - 如何使用 strtok()

c - 'const char *' 类型的变量不能分配给 'char' 类型的实体

c++ - 如何将 auto_ptr 添加到 vector