哎呀,这是一个标准的“成语”
# define INT_MIN (-INT_MAX - 1)
# define INT_MAX 2147483647
问:为什么INT_MIN的定义不是as-2147483648?
因为2147483648
是一个long
值,因为它不适合int
(在具有32位int
和64位long
的常见系统中,在具有32位long
的系统上,它是long long
类型)。所以-2147483648
是long
类型,而不是int
类型。
请记住,在C中,未后缀的十进制整数常量是可以表示的第一种类型int
、long
或long long
。
此外,在C中-2147483648不是整数常数2147483648是一个整数常数
-2147483648是由一元运算符和整数常数构成的表达式。
编辑:如果您不相信
-2147483648
不是int
类型(评论中的一些人似乎仍然怀疑),您可以尝试打印以下内容:
printf("%zu %zu\n", sizeof INT_MIN, sizeof -2147483648);
你很可能会得到:
4 8
在通用32位和64位系统上。
另外,为了跟随评论,我正在谈论最近的C Standard:使用c99或c11方言来测试这个。c89对十进制整数常量的规则不同:
-2147483648
在c89中是无符号长
类型。事实上,在c89中(在c99中有所不同,见上文),未后缀的十进制整数常量是int
、long
或无符号长
类型。
EDIT2:@WhozCraig添加了另一个示例(但对于C)来显示
-2147483648
不是int
类型。
下面的例子虽然是C语言的,但说明了这一点。它是用32位架构g编译的。请注意从传递的参数推导中收集的类型信息:
#include <iostream>
#include <climits>
template<typename T>
void foo(T value)
{
std::cout << __PRETTY_FUNCTION__ << '\n';
std::cout << value << '\n';
}
int main()
{
foo(-2147483648);
foo(INT_MIN);
return 0;
}
输出
void foo(T) [T = long long]
-2147483648
void foo(T) [T = int]
-2147483648
问题内容: 为什么Java不允许将顶级类声明为私有?除了“我们无法访问私人课程”之外,还有其他原因吗? 问题答案: 顶级类作为私有类是完全没有用的,因为没有人可以访问它。
问题内容: 为什么经常被称为 代替 ? W3,MDN和MSDN都声明它是可选的。此外,ActiveX控件似乎不需要参数: 这种做法至少可以追溯到2005年的Google Maps中 ,但被缩小了,没有任何解释: 问题答案: 如果您看一下XMLHttpRequest的旧规范,似乎W3C似乎并不需要在某一点上将该参数设为可选,这可能导致人们提供了一个明确的null值,以防万一。 (搜索“应支持发送”)
问题内容: 我是一个完整的初学者。 我已阅读了有关解决方案的Google文档。我在互联网上搜索了同样的内容。 但。一切似乎都是技术性的。 据我了解,.Flush有助于在功能出现时立即执行这些功能,而无需将它们捆绑在一起。 我对吗? 如果不是的话,外行人的含义是什么?并请举一个简单的例子。谢谢。 问题答案: 程序员在希望确保在继续之前将先前代码的输出和/或效果写入电子表格时会使用。如果您不这样做,则
问题内容: 在我的Linux机器上,是一个普通的旧机器。DO 拥有一种特殊的原子质量? 问题答案: C99 仅符合非常小的“原子性”定义,因为 C99没有并发概念 ,只有可中断性。(C2011添加了一个并发模型,并使用它来保证更强的类型;但是,AFAIK 保持不变,因为其 存在的理由 仍然是与信号处理程序通信,而不是跨线程。) 这就是C99所说的: (第7.14节,第2段)定义的类型为,它是对象的
我已经为我的自定义日志拦截器执行了以下操作 我正在将拦截器设置为restTemboard 记录器正在将响应正确地打印到控制台,但最后响应会以空的形式返回给调用者。我无法调试和解决它。 我已经弄明白了StreamUtils。copyToString(response.getBody(),字符集。defaultCharset())正在读取一次输入流,并且不再在其中保存响应正文(现在为空) 还有谁也面临
问题内容: 据我所知,以下两个代码段将达到相同的目的。为什么有块呢? 代码A: 代码B: 问题答案: 如果您未处理的异常被抛出会怎样?(我希望你不会抓到…) 如果从try块内部返回会怎样? 如果catch块引发异常会怎样? 一个代码块确保 无论 您退出该代码块(以几种方式明确地中止整个过程),该代码块都将被执行。这对于确定性清除资源很重要。