On Sun, Jul 09, 2023 at 02:42:55PM +0800, Linke Li wrote: > From: Linke Li <lilinke99@xxxxxxxxx> > > Fix undefined behavior in the code by properly handling the left shift operaion. > Instead of left-shifting a negative value, explicitly cast -1 to an unsigned int > before the shift. This ensures well defined behavior and resolves any potential > issues. This certainly fixes the problem, but wouldn't it be easier to get the compiler to do the work for us? #include <stdio.h> int f(unsigned char *p) { return (signed char)p[0]; } int main(void) { unsigned char x = 0xa5; printf("%d\n", f(&x)); return 0; } prints -91.