It isn't clear whether "word" is defined as signed or unsigned integer. It is not an ISO C type, it is a non-standard type, so the answer can only be found in your compiler docs. What compiler are you using?
My advise would generally be to avoid all untrusted integer types, including plain "int", "short" etc, and thereby avoid all signedness and porting issues. Use something like this instead:
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned long uint32;
typedef signed char sint8;
typedef signed short sint16;
typedef signed long sint32;