Tag: long integer

什么是C和C ++中的1LL或2LL?

我正在研究Google Code Jam中的一些解决方案,有些人使用了我以前从未见过的这些东西。 例如, 2LL*r+1LL 2LL和1LL是什么意思? 他们的包括如下所示: #include #include #define _USE_MATH_DEFINES 要么 #include

很长的 Int C / C ++ – 重点是什么?

正如我最近所了解的那样,C / C ++中的长度与int的长度相同。 简单地说,为什么? 甚至在语言中包含数据类型似乎也毫无意义。 它没有特定于int的特定用途吗? 我知道我们可以像这样声明一个64位的int: long long x = 0; 但是为什么语言选择这样做,而不仅仅是做得好……比int更长? 其他语言如C#这样做,为什么不用C / C ++呢?

警告:此十进制常量仅在ISO C90中无符号

一段代码: long rangeVar = 0; rangeVar = atol(p_value); if (rangeVar >= -2147483648 && rangeVar <= 2147483647) 在编译时,我得到: 警告:此十进制常量仅在ISO C90中无符号 提前致谢

C:将最小32位整数(-2147483648)转换为float给出正数(2147483648.0)

当我遇到一些我觉得奇怪的行为时,我正在研究一个嵌入式项目。 我设法在键盘上重现它(见下文)以确认,但我的机器上没有任何其他C编译器可以在它们上进行尝试。 场景:对于32位整数可以容纳的最负值,我有一个#define ,然后我尝试使用它来与浮点值进行比较,如下所示: #define INT32_MIN (-2147483648L) void main() { float myNumber = 0.0f; if(myNumber > INT32_MIN) { printf(“Everything is OK”); } else { printf(“The universe is broken!!”); } } 键盘链接: http : //codepad.org/cBneMZL5 对我来说,看起来这个代码应该可以正常工作,但令我惊讶的是它打印出The universe is broken!! 。 此代码隐式将INT32_MIN强制转换为float ,但事实certificate,这会导致浮点值为2147483648.0 (正!),即使浮点类型完全能够表示-2147483648.0 。 有没有人对这种行为的原因有任何见解? 代码解决方案 :正如Steve Jessop在他的回答中提到的, limits.h和stdint.h包含正确的(工作) int范围define s,所以我现在使用这些而不是我自己的#define 问题/解决方案解释摘要:鉴于答案和讨论,我认为这是对正在发生的事情的一个很好的总结(注意:仍然阅读答案/评论,因为它们提供了更详细的解释): 我使用的是32位long的C89编译器,因此任何大于LONG_MAX且小于或等于ULONG_MAX后跟L后缀的值都有一个unsigned long类型 (-2147483648L)实际上是一个一元-在unsigned long […]