4 ms·
The sum() example does not work as the article says it does. Under Visual Studio 2013 compiling for x86 (C++ compiler, but C++ also has integer promotion rules)
by Scene_Cast2 13y ago
The sum() example does not work as the article says it does. Under Visual Studio 2013 compiling for x86 (C++ compiler, but C++ also has integer promotion rules), the function returns zero. The reason is: 65535 = 2^16-1. uint16_t is signed, therefore it has 15 bits to represent the value. When executing "int16_t a = 65535;" under a debugger, "a" is set to -1.
- EpicEng 13y agoIt's actually undefined behavior.
- pfacka 13y agoThanks, I tested with GCC and Clang on Linux on 64-bit x86, GCC+OpenBSD on 32-bit+x86 and GCC+Linux on PowerPC 603. The point I was aiming for is that described operation is indeed undefined.
- burstmode 13y agoIf uint16_t really is a signed 15bit value under VS2013, somebody in the compiler development department has a great sense of humor.
- Scene_Cast2 13y agoMy bad - that's a typo. I meant int16_t, the same as in the sample code.