我一直看到这个常量弹出各种图形头文件
0.0039215689
它似乎与颜色有关吗?
void RDP_G_SETFOGCOLOR(void)
{
    Gfx.FogColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f;
    Gfx.FogColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f;
    Gfx.FogColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f;
    Gfx.FogColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f;
}
void RDP_G_SETBLENDCOLOR(void)
{
    Gfx.BlendColor.R = _SHIFTR(w1, 24, 8) * 0.0039215689f;
    Gfx.BlendColor.G = _SHIFTR(w1, 16, 8) * 0.0039215689f;
    Gfx.BlendColor.B = _SHIFTR(w1, 8, 8) * 0.0039215689f;
    Gfx.BlendColor.A = _SHIFTR(w1, 0, 8) * 0.0039215689f;
    if(OpenGL.Ext_FragmentProgram && (System.Options & BRDP_COMBINER)) {
        glProgramEnvParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 2, Gfx.BlendColor.R, …long long int n = 2000*2000*2000*2000;    // overflow
long long int n = pow(2000,4);            // works
long long int n = 16000000000000;         // works
为什么第一个溢出(乘以整数文字常量以分配给 long long)?
它与第二个或第三个有什么不同?
从C++ 14开始,感谢n3781(它本身没有回答这个问题),我们可能会编写如下代码:
const int x = 1'234; // one thousand two hundred and thirty four
目的是改进这样的代码:
const int y = 100000000;
并使其更具可读性.
下划线(_)字符已经由用户定义的文本采取了C++ 11,和逗号(,)的本地化问题-许多欧洲国家令人困惑†以此作为小数点分隔符-与逗号运算符的冲突,虽然我做的想知道什么样的现实世界的代码可能会被允许,例如1,234,567.
无论如何,更好的解决方案似乎是空间特征:
const int z = 1 000 000;
这些相邻的数字文字标记可以由预处理器连接,就像字符串文字一样:
const char x[5] = "a" "bc" "d";
相反,我们得到了撇号('),我没有被任何我认识为数字分隔符的书写系统使用.
是否有理由选择撇号而不是简单的空间?
†令人费解,因为所有这些语言都在文本中保留了一个逗号"分开"一个原本句子的概念,其句号用于"终止"句子 - 至少对我来说,这非常类似于逗号"分开"一个数字的整数部分和一个句号"终止"它为分数输入做好准备.
当我进行以下计算时:
unsigned long long int data_size = 60123456 * 128 * sizeof(double);
printf("data_size= %llu  \n", data_size);
我出乎意料地得到溢出警告:
test.c:20:49: warning: overflow in expression; result is -894132224 with type 'int' [-Winteger-overflow]
    unsigned long long int data_size = 60123456 * 128 * sizeof(double);
                                                ^
1 warning generated.
即使我正在使用,我也无法理解为什么会出现此错误unsigned long long int!有人可以解释原因吗?谢谢
我正在使用C(不是C++).
我需要将一个浮点数转换成一个int.我不想舍入到最接近的数字,我只是想消除整数部分之后的内容.就像是
4.9 -> 4.9-> 4
是否有更人性化的方式来表示用C++或C编写的应用程序的源代码中的大数字?
例如2,345,879,444,641,如果我们想要一个程序返回我们要做的那个数字,那么就用C或C++中的数字来表示return 2345879444641.
但这不是真的可读.
例如,在PAWN(一种脚本语言)中,我可以做return 2_345_879_444_641甚至是return 2_34_58_79_44_46_41这两种语言都可以返回数字2,345,879,444,641.
对于人眼来说,这更具可读性.
这有C或C++的等价物吗?
什么时候真正需要这些宏?
我的系统 (gcc/glibc/linux/x86_64)stdint.h使用__这些( -prefixed) 变体来定义:
# define INT64_MIN      (-__INT64_C(9223372036854775807)-1)
# define INT64_MAX      (__INT64_C(9223372036854775807))
# define UINT64_MAX     (__UINT64_C(18446744073709551615))
# define INT_LEAST64_MIN    (-__INT64_C(9223372036854775807)-1)
# define INT_LEAST64_MAX    (__INT64_C(9223372036854775807))
# define UINT_LEAST64_MAX   (__UINT64_C(18446744073709551615))
# define INT_FAST64_MIN     (-__INT64_C(9223372036854775807)-1)
# define INT_FAST64_MAX     (__INT64_C(9223372036854775807))
# define UINT_FAST64_MAX    (__UINT64_C(18446744073709551615))
# define INTMAX_MIN     (-__INT64_C(9223372036854775807)-1)
# define INTMAX_MAX     (__INT64_C(9223372036854775807))
# define UINTMAX_MAX        (__UINT64_C(18446744073709551615))
然而,limits.h它似乎与:
#   define LONG_MAX 9223372036854775807L
#   define ULONG_MAX    18446744073709551615UL
为什么不能stdint.h忘记_C宏并简单地做:
#   define INT_LEAST64_MAX  9223372036854775807 //let it grow …我正在阅读用c编写的中间件代码,并在代码中编写以下代码:
usleep(6*1000*1000);
所以我的问题是:
写这样的背后有原因吗?为什么不写6000000?这种乘法对程序的性能有影响吗?
在开始时,我写了一个演示来获得2G内存,但我遇到了这样的问题,我不知道为什么,num1,num2,num3有什么不同?
#include<stdio.h>
int main(){
    unsigned long num1 = 1024*1024*1024*2;
    unsigned long num2 = 1024*1024*1024*2.0;
    unsigned long num3 = 1024*1024*1024;
    num3 *= 2;
    printf("num1:%lu\n num2:%lu\n num3:%lu\n", num1, num2, num3);
    return 0;
}
输出:
num1:18446744071562067968
num2:2147483648
num3:2147483648
我不明白为什么下面的代码输出负数
int main() {
    int cases = 1000000 * 50;
    int now = 1;
    for (int i = 0; i < cases; i++) {
        now++;
        now = now * now;
        now = now % cases;
        if (now < 0) {
            break;
        }
    }
    printf("%d", now);
    return 0;
}
输出是: -37008604