相关疑难解决方法(0)

如何在C++中安全地平均两个无符号整数?

单独使用整数数学,我想在C++中"安全地"平均两个无符号整数.

我所说的"安全"是避免溢出(以及任何其他可以想到的).

例如,平均2005000很容易:

unsigned int a = 200;
unsigned int b = 5000;
unsigned int average = (a + b) / 2; // Equals: 2600 as intended
Run Code Online (Sandbox Code Playgroud)

但是在42949672955000的情况下:

unsigned int a = 4294967295;
unsigned int b = 5000;
unsigned int average = (a + b) / 2; // Equals: 2499 instead of 2147486147
Run Code Online (Sandbox Code Playgroud)

我提出的最好的是:

unsigned int a = 4294967295;
unsigned int b = 5000;
unsigned int average = (a / 2) + …
Run Code Online (Sandbox Code Playgroud)

c++ math unsigned-integer

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

标签 统计

c++ ×1

math ×1

unsigned-integer ×1