相关疑难解决方法(0)

常数0.0039215689代表什么?

我一直看到这个常量弹出各种图形头文件

0.0039215689
Run Code Online (Sandbox Code Playgroud)

它似乎与颜色有关吗?

这是Google的第一个热门话题:

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, …
Run Code Online (Sandbox Code Playgroud)

c floating-point constants magic-numbers

308
推荐指数
2
解决办法
2万
查看次数

为什么long long n = 2000*2000*2000*2000;溢出?

long long int n = 2000*2000*2000*2000;    // overflow

long long int n = pow(2000,4);            // works
long long int n = 16000000000000;         // works
Run Code Online (Sandbox Code Playgroud)

为什么第一个溢出(乘以整数文字常量以分配给 long long)?

它与第二个或第三个有什么不同?

c++ math types integer-overflow literals

149
推荐指数
6
解决办法
1万
查看次数

为什么没有为C++ 14位分隔符选择空格字符?

从C++ 14开始,感谢n3781(它本身没有回答这个问题),我们可能会编写如下代码:

const int x = 1'234; // one thousand two hundred and thirty four
Run Code Online (Sandbox Code Playgroud)

目的是改进这样的代码:

const int y = 100000000;
Run Code Online (Sandbox Code Playgroud)

并使其更具可读性.

下划线(_)字符已经由用户定义的文本采取了C++ 11,和逗号(,)的本地化问题-许多欧洲国家令人困惑以此作为小数点分隔符-与逗号运算符的冲突,虽然我做的想知道什么样的现实世界的代码可能会被允许,例如1,234,567.

无论如何,更好的解决方案似乎是空间特征:

const int z = 1 000 000;
Run Code Online (Sandbox Code Playgroud)

这些相邻的数字文字标记可以由预处理器连接,就像字符串文字一样:

const char x[5] = "a" "bc" "d";
Run Code Online (Sandbox Code Playgroud)

相反,我们得到了撇号('),我没有被任何我认识为数字分隔符的书写系统使用.

是否有理由选择撇号而不是简单的空间?


令人费解,因为所有这些语言都在文本中保留了一个逗号"分开"一个原本句子的概念,其句号用于"终止"句子 - 至少对我来说,这非常类似于逗号"分开"一个数字的整数部分和一个句号"终止"它为分数输入做好准备.

c++ language-lawyer digit c++14

63
推荐指数
5
解决办法
1万
查看次数

即使使用unsigned long int也会出现溢出

当我进行以下计算时:

unsigned long long int data_size = 60123456 * 128 * sizeof(double);
printf("data_size= %llu  \n", data_size);
Run Code Online (Sandbox Code Playgroud)

我出乎意料地得到溢出警告:

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.
Run Code Online (Sandbox Code Playgroud)

即使我正在使用,我也无法理解为什么会出现此错误unsigned long long int!有人可以解释原因吗?谢谢

c

29
推荐指数
3
解决办法
4911
查看次数

C将浮点数转换为int

我正在使用C(不是C++).

我需要将一个浮点数转换成一个int.我不想舍入到最接近的数字,我只是想消除整数部分之后的内容.就像是

4.9 -> 4.9 -> 4

c floating-point int casting type-conversion

17
推荐指数
4
解决办法
8万
查看次数

在源代码中代表大数字以提高可读性?

是否有更人性化的方式来表示用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++的等价物吗?

c c++ c-preprocessor

16
推荐指数
4
解决办法
2749
查看次数

stdint.h 中的 {U,}INTn_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))
Run Code Online (Sandbox Code Playgroud)

然而,limits.h它似乎与:

#   define LONG_MAX 9223372036854775807L
#   define ULONG_MAX    18446744073709551615UL
Run Code Online (Sandbox Code Playgroud)

为什么不能stdint.h忘记_C宏并简单地做:

#   define INT_LEAST64_MAX  9223372036854775807 //let it grow …
Run Code Online (Sandbox Code Playgroud)

c language-lawyer

5
推荐指数
1
解决办法
565
查看次数

为什么将int格式化为6*1000*1000而不是6000000

我正在阅读用c编写的中间件代码,并在代码中编写以下代码:

usleep(6*1000*1000);
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

写这样的背后有原因吗?为什么不写6000000?这种乘法对程序的性能有影响吗?

c syntax int formatting

4
推荐指数
3
解决办法
226
查看次数

为什么1024*1024*1024*2!= 1024*1024*1024*2

在开始时,我写了一个演示来获得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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

num1:18446744071562067968
num2:2147483648
num3:2147483648
Run Code Online (Sandbox Code Playgroud)

c integer-overflow

3
推荐指数
1
解决办法
416
查看次数

在 C 中将两个正数相乘返回负数

我不明白为什么下面的代码输出负数

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;
}
Run Code Online (Sandbox Code Playgroud)

输出是: -37008604

c

2
推荐指数
1
解决办法
93
查看次数