为什么这两个结果之间存在差异?
我是 C 编程语言的初学者,我不明白为什么第二个命令行中有 -1。先感谢您。
-
printf("The maximum value of UNSIGNED INT = %un", UINT_MAX);结果:
4294967295 -
printf("The maximum value of UNSIGNED INT = %dn", UINT_MAX);结果:(
-1为什么?)
回答
%d告诉printf格式化int你通过它。你没有通过它int; 你通过了它unsigned int。它对此一无所知,并尝试使用您传递的数据。
“-1”是一个常见的结果,因为最大值的位unsigned int(所有位 1)与用于二进制补码 ?1 的int位(也是所有位 1)相同。但是,当格式转换和参数不匹配时,可能会出现各种问题。C 被开发为一种语言,用于以人性化的方式告诉计算机该做什么(使用符号名称和算术运算以及方便的函数,而不是汇编语言指令)。这使得告诉计算机做错误的事情很容易。这与其他语言不同,它们添加了大量规则和软件来自动为您处理事情,例如更严格地管理类型。