有符号 2 的补码 32 位整数的问题:
\n\n\n\n
satMul2- 乘以 2,饱和Tmin或Tmax溢出。
\n示例:satMul2(0x30000000) = 0x60000000
\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0satMul2(0x40000000) = 0x7FFFFFFF(饱和到TMax)
\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0satMul2(0x60000000) = 0x80000000(饱和到TMin)
\n合法操作:!~&^|+<<>>
\n最大操作:20
\n评级:3
我想实现一个类似的功能
\nif (a) return b;\nelse return c;\nRun Code Online (Sandbox Code Playgroud)\n这是我的解决方案(10 次操作):
\nint satMul2(int x) {\n int rval = x << 1;\n int sign = rval ^ x;\n int minn = 1 << 31;\n …Run Code Online (Sandbox Code Playgroud) c bit-manipulation bitwise-operators micro-optimization saturation-arithmetic