Fastest way to flip the sign of a double / float in C
问题 What is the fastest way to flip the sign of a double (or float) in C? I thought, that accessing the sign bit directly would be the fastest way and found the following: double a = 5.0; *(__int64*)&a |= 0x8000000000000000; // a = -5.0 float b = 3.0; *(int*)&b |= 0x80000000; // b = -3.0 However, the above does not work for negative numbers: double a = -5.0; *(__int64*)&a |= 0x8000000000000000; // a = -5.0 回答1: Any decent compiler will implement this bit manipulation if you just prepend a