در اعمال علامت منفی به متغیرهایی از نوع بدون علامت و نسبت دادن حاصل به متغیری با طول بزرگتر باید شکل صحیح کدنویسی رعایت شود تا نتیجه عملیات اشتباه نباشد. به عنوان توضیح بیشتر کد زیر را در نظر می گیریم که هدف از نوشتن آن قرار دادن مقدار منفی x در z است:
unsigned short x=1;
long z;
z=-x;
در رابطه اخیر بعد از اعمال علامت منفی، مقدار 65535 در z قرار خواهد گرفت که دلیل آن 16 بیتی بودن و بدون علامت بودن x است. حاصل اعمال علامت منفی به متغیر 16 بیتی بدون علامت x برابر 65535 است و برای قرار گرفتن در مقدار 32 بیتی، دو بایت با مقدار صفر هم به 16 بیت اضافه می شود تا در متغیر 32 بیتی قرار بگیرد. پس با این روش نتیجه مورد انتظار به دست نمی آید. برای تصحیح نتیجه باید رابطه به این شکل نوشته شود:
z=-(long)x;
که در اینصورت حاصل در متغیر 32 بیتی z برابر با منفی یک (معادل با
4294967295) خواهد شد که همان عدد مورد انتظار است. صحت این موارد در شبیه ساز C-spy کامپایلر IAR هم تست شده است. (اگر در فهم این اعداد دچار ابهام هستید به مبحث اعداد علامت دار در مبنای دو مراجعه کنید).@KnowledgePlus