单独使用整数数学,我想在C++中"安全地"平均两个无符号整数.
我所说的"安全"是避免溢出(以及任何其他可以想到的).
例如,平均200和5000很容易:
unsigned int a = 200;
unsigned int b = 5000;
unsigned int average = (a + b) / 2; // Equals: 2600 as intended
Run Code Online (Sandbox Code Playgroud)
但是在4294967295和5000的情况下:
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)