TGViewer
KnowledgePlus.ir KnowledgePlus.ir @knowledgeplus · 5.52K subscribers
Post #543 13.6K
نکاتی از زبان برنامه نویسی C:

در اعمال علامت منفی به متغیرهایی از نوع بدون علامت و نسبت دادن حاصل به متغیری با طول بزرگتر باید شکل صحیح کدنویسی رعایت شود تا نتیجه عملیات اشتباه نباشد. به عنوان توضیح بیشتر کد زیر را در نظر می گیریم که هدف از نوشتن آن قرار دادن مقدار منفی 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
More from @knowledgeplus
  1. Oct 16, 2026هزینه فرصت (Opportunity cost) @KnowledgePlus
  2. Oct 15, 2026درباره بازار کار بِکر مرتبط با رفع نیازهای مدارات سوئیچینگ @KnowledgePlus
  3. Aug 19, 2026در بخش پایانی فیلم Amadeus ساختهٔ سال ۱۹۸۴ برای نمایش نبوغ موتزارت، سکانسی دربارهٔ ساخت بخ…
  4. Jul 17, 2026چکیده ای از گفتگوی انجام شده در تاریخ ۱۴۰۵/۴/۲۵ با موضوعات: ۱- بیان مشکلات فعلی ۲- اهمیت ح…
  5. Feb 11, 2026با توجه به گران شدن بیش از حد قلع و سیم لحیم، به این نکته توجه کنید که وزن قرقره ها در نمو…
  6. Dec 12, 2025بعضی از پر بازدیدترین پست های کانال از ۱۰ سال پیش تاکنون: زرنگی در دو نسخه شباهت عملکرد مغ…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →