کامپیوتر چطور با صفر و یک کار می‌کند؟

۱۴۰۵/۰۸/۱۳ | چهارشنبه، ۱۳ آبان
دوره آموزشی ویژه 4 اپیزود اول تمام دوره های آموزشی ویدیویی رایگان میباشد دانلود رایگان

دورهٔ جامع CSS از صفر

آموزش CSS از صفر در ۲۲ ویدیو: مدل جعبه، انتخاب‌گر، فلکس‌باکس، گرید، واکنش‌گرایی، متغیرها، انیمیشن و معماری، تا پروژهٔ کامل صفحهٔ محصول؛ کد کنار خروجی ...

مدرس دوره : تیم 22 اپیزود ویدیویی 03 ساعت و 33 دقیقه و 59 ثانیه آموزش ویدیویی
متن پرونده شماره 1006 - عمومی

کامپیوتر همه‌چیز را با بیت‌های صفر و یک نمایش می‌دهد و با ترانزیستورها و گیت‌های منطقی روی آن‌ها محاسبه می‌کند. این مقاله توضیح می‌دهد سیستم دودویی چیست، متن و تصویر و صدا چطور به عدد تبدیل می‌شوند، گیت و جمع‌کننده چگونه ساخته می‌شوند، حافظه و پردازنده چه می‌کنند، برنامه تا دستور ماشین چه مسیری را می‌رود و محاسبات دیجیتال چه محدودیت‌هایی دارد.

۱. چرا کامپیوتر فقط صفر و یک می‌فهمد؟

دلیل اصلی ساده است: ساخت قطعه‌ای که دو حالت پایدار و قابل‌تشخیص داشته باشد، بسیار آسان‌تر و مطمئن‌تر از ساخت قطعه‌ای با ده حالت است. جریان برق یا هست یا نیست، ولتاژ یا بالاست یا پایین. اگر بخواهیم ده سطح ولتاژ را از هم جدا کنیم، یک نویز کوچک خطا ایجاد می‌کند.

همه‌چیز از بیت‌ها آغاز می‌شود؛ بیت‌ها از گیت‌ها عبور می‌کنند، گیت‌ها از ترانزیستورها ساخته می‌شوند و میلیاردها ترانزیستور در یک تراشه جا می‌گیرند.

به این دو حالت قراردادی نام صفر و یک می‌دهیم. هر یک از آن‌ها یک «بیت» است، کوچک‌ترین واحد اطلاعات. خود بیت معنایی ندارد؛ معنا از قرارداد می‌آید. گروهی از بیت‌ها می‌تواند عدد، حرف، رنگ، صدا یا یک دستور باشد، بسته به این که برنامه چطور آن را تفسیر کند.

هشت بیت کنار هم یک بایت می‌سازد که دویست و پنجاه و شش مقدار مختلف می‌تواند داشته باشد. حافظه و فایل‌ها با بایت اندازه‌گیری می‌شوند. کیلوبایت، مگابایت و گیگابایت مضرب‌هایی از آن هستند. ظرفیت یک حافظهٔ شانزده گیگابایتی یعنی میلیاردها بایت که هر کدام آدرس مخصوص خود را دارد.

پس کامپیوتر «فقط صفر و یک می‌فهمد» به این معنی نیست که ساده است. معنایش این است که لایه‌های بالاتر، مثل زبان‌های برنامه‌نویسی، سیستم‌عامل و برنامه‌ها، همه روی این پایهٔ ساده ساخته شده‌اند. هر لایه جزئیات لایهٔ پایین را پنهان می‌کند تا ما بدون دانستن مدار الکتریکی از کامپیوتر استفاده کنیم.

۲. سیستم دودویی چطور عدد می‌سازد؟

ما در زندگی روزمره از سیستم دهدهی استفاده می‌کنیم که هر رقم آن ارزش مکانی توان‌هایی از ده دارد. سیستم دودویی دقیقاً همین ایده را دارد، ولی با توان‌های دو. از راست به چپ، ارزش خانه‌ها یک، دو، چهار، هشت، شانزده و به همین ترتیب است و هر خانه فقط صفر یا یک می‌پذیرد.

برای مثال، عدد دودویی ۱۰۱۱ یعنی هشت به‌علاوهٔ صفر به‌علاوهٔ دو به‌علاوهٔ یک، که برابر یازده می‌شود. برای تبدیل در جهت عکس، عدد را مرتب بر دو تقسیم می‌کنند و باقی‌مانده‌ها را از آخر به اول می‌نویسند. در بسیاری از زبان‌ها این تبدیل با یک تابع انجام می‌شود، مثل نمونهٔ پایتون زیر.

print(bin(11))        # 0b1011
print(int('1011', 2)) # 11
print(255 == 0b11111111)  # True

با هشت بیت می‌توان اعداد صفر تا ۲۵۵ را نشان داد و با شانزده بیت تا ۶۵۵۳۵. عددهای منفی معمولاً با روشی به نام مکمل دو نمایش داده می‌شوند که جمع و تفریق را با همان مدار ساده می‌کند. عددهای اعشاری هم با فرمت‌های استاندارد، مثل ممیز شناور، به شکل علمی ذخیره می‌شوند.

گاهی برنامه‌نویسان به‌جای دودویی از مبنای شانزده، یعنی هگزادسیمال، استفاده می‌کنند، چون هر رقم آن دقیقاً معادل چهار بیت است و خواندنش آسان‌تر است. مثلاً هر بایت با دو رقم نوشته می‌شود. کد رنگ در طراحی وب هم با همین مبنا نوشته می‌شود.

۳. متن و تصویر و صدا چطور به عدد تبدیل می‌شوند؟

برای متن، یک جدول قراردادی وجود دارد که به هر نویسه یک عدد می‌دهد. در جدول قدیمی اسکی، حرف بزرگ انگلیسی A عدد ۶۵ دارد. امروزه استاندارد یونی‌کد بیش از صد هزار نویسه، از جمله حروف فارسی و عربی، شکلک‌ها و نمادها را پوشش می‌دهد و رایج‌ترین روش ذخیره‌اش یو تی اف هشت است.

تصویر دیجیتال شبکه‌ای از نقطه‌های کوچک به نام پیکسل است. رنگ هر پیکسل معمولاً با سه عدد برای قرمز و سبز و آبی میان صفر تا ۲۵۵ ثبت می‌شود. یعنی هر پیکسل سه بایت می‌گیرد. تصویری با دوازده میلیون پیکسل، بدون فشرده‌سازی، حدود سی و شش مگابایت حجم دارد.

صدا موجی پیوسته است. برای ذخیره‌اش، میکروفن ولتاژ را هزاران بار در ثانیه اندازه می‌گیرد و هر اندازه را به عدد تبدیل می‌کند. در سی‌دی صوتی این کار چهل و چهار هزار و صد بار در ثانیه و با شانزده بیت برای هر نمونه انجام می‌شود. پخش صدا فرایند برعکس است و عددها دوباره به ولتاژ تبدیل می‌شوند.

فایل‌های جی‌پگ، ام‌پی‌تری و ام‌پی‌فور با فشرده‌سازی حجم را کم می‌کنند. بعضی روش‌ها، مثل زیپ، بدون از دست رفتن اطلاعات‌اند و بعضی، مثل جی‌پگ، بخش‌های کم‌اهمیت‌تر برای چشم و گوش را حذف می‌کنند. بنابراین همه‌چیز، از عکس تا فیلم، در نهایت دنبالهٔ بیت‌هایی است که نرم‌افزار آن را تفسیر می‌کند.

محصول اورجینال INZIP
قالب وردپرس باریستا مخصوص کافه تم نسکافه ای روشن (دو زبانه)

قالب وردپرس باریستا مخصوص کافه تم نسکافه ای روشن (دو زبانه)

دانلود پوسته وردپرس باریستا؛ قالب کافیشاپ، رُستری قهوه و فروشگاه قهوه دوزبانه با منوی رومیزی، رزرو آنلاین میز با کد پیامکی و ووکامرس. طراحی اختصاصی inzip.ir

تحویل آنی آپدیت رایگان بدون قفل لایسنس پشتیبانی واقعی
۳,۹۹۰,۰۰۰ تومان ۲,۹۶۰,۰۰۰ تومان
بازدید و دانلود آنی
٪۲۶
تخفیف ویژه
سود شما
۱,۰۳۰,۰۰۰ تومان

۴. ترانزیستور؛ کلید ریز پشت همه‌چیز

ترانزیستور یک کلید الکترونیکی است که با ولتاژ کنترل می‌شود، نه با دست. در رایج‌ترین نوع آن، یعنی ماسفت، ولتاژ روی پایهٔ ورودی تعیین می‌کند که جریان بین دو پایهٔ دیگر برقرار شود یا نه. این رفتار روشن و خاموش همان صفر و یک فیزیکی است.

ترانزیستور از مادهٔ نیمه‌رسانا، معمولاً سیلیسیم، ساخته می‌شود. نیمه‌رسانا ماده‌ای است که با افزودن مقدار بسیار کمی ناخالصی می‌توان رسانایی آن را تنظیم کرد. ترانزیستور در سال ۱۹۴۷ در آزمایشگاه‌های بل ساخته شد و جای لامپ‌های خلأ بزرگ و پرمصرف را گرفت.

مدار مجتمع، که در اواخر دههٔ پنجاه میلادی ابداع شد، امکان ساخت چندین ترانزیستور روی یک تکه سیلیسیم را داد. امروز یک پردازندهٔ معمولی میلیاردها ترانزیستور دارد. اندازهٔ ویژگی‌های آن‌ها در حد چند ده نانومتر است و تولیدشان نیازمند یکی از پیچیده‌ترین فرایندهای صنعتی بشر است.

«کامپیوتر چیز جادویی نیست؛ لایه‌ای از ایده‌های ساده است که روی هم چیده شده‌اند، از یک کلید روشن و خاموش تا برنامه‌ای که همین حالا اجرا می‌کنید.»

قانون مور می‌گوید که تعداد ترانزیستورها در یک تراشه تقریباً هر دو سال دو برابر می‌شود. این روند چند دهه ادامه داشت، ولی کوچک‌تر شدن بیشتر با مشکلاتی مثل گرما و محدودیت‌های فیزیکی روبه‌رو است. به همین دلیل طراحان از روش‌هایی مثل چند هسته‌ای کردن و تراشه‌های تخصصی نیز بهره می‌برند.

۵. گیت‌های منطقی چطور تصمیم می‌گیرند؟

چند ترانزیستور کنار هم یک گیت منطقی می‌سازند؛ مداری که یک یا چند بیت ورودی را می‌گیرد و بر اساس قاعده‌ای ساده بیت خروجی می‌دهد. گیت‌های پایه را در فهرست زیر می‌بینید. هر گیت را با جدول درستی، که همهٔ ورودی‌های ممکن و خروجی را نشان می‌دهد، کامل توصیف می‌کنند.

  • نه: ورودی را برعکس می‌کند
  • و: فقط اگر هر دو ورودی یک باشند، یک می‌دهد
  • یا: اگر دست‌کم یک ورودی یک باشد، یک می‌دهد
  • یای انحصاری: اگر ورودی‌ها با هم فرق داشته باشند، یک می‌دهد

گیت «نه» ورودی را برعکس می‌کند. گیت «و» فقط وقتی یک می‌دهد که هر دو ورودی یک باشند. گیت «یا» اگر دست‌کم یکی یک باشد، یک می‌دهد. گیت «یای انحصاری» وقتی یک می‌دهد که ورودی‌ها متفاوت باشند. این‌ها منطق ساده‌ای است که هر کسی با چند مثال روزمره می‌تواند بفهمد.

جالب است که گیت‌های «نه‌و» و «نه‌یا» به‌تنهایی کافی‌اند. یعنی با فقط یکی از آن‌ها می‌توان همهٔ گیت‌های دیگر را ساخت. به همین دلیل آن‌ها را گیت همگانی می‌نامند. در صنعت، طراحان معمولاً مدار را با زبان‌های توصیف سخت‌افزار می‌نویسند و نرم‌افزار آن را به هزاران گیت تبدیل می‌کند.

همین منطق در شرط‌های برنامه‌نویسی هم دیده می‌شود. عبارتی مثل «اگر کاربر وارد شده و رمز درست است» همان گیت «و» است. این شباهت تصادفی نیست، زیرا برنامه‌نویسی در نهایت دستور دادن به مدارهایی است که از همین گیت‌ها ساخته شده‌اند و هر شرط در نهایت به عملیات منطقی ترجمه می‌شود.

۶. جمع‌کننده چطور با گیت ساخته می‌شود؟

جمع‌کردن دو عدد دودویی یک بیتی ساده است: صفر به‌علاوهٔ صفر صفر، صفر به‌علاوهٔ یک یک، و یک به‌علاوهٔ یک برابر ۱۰ دودویی، یعنی خروجی صفر با یک رقم نقلی. اگر به این رفتار دقت کنید، خروجی «جمع» همان گیت یای انحصاری و رقم نقلی همان گیت «و» است.

این دو گیت با هم نیم‌جمع‌کننده را می‌سازند. برای جمع عددهای چندبیتی، رقم نقلی مرحلهٔ قبل هم باید لحاظ شود، پس به جمع‌کنندهٔ کامل نیاز داریم که سه ورودی دارد. جمع‌کنندهٔ کامل را می‌توان با دو نیم‌جمع‌کننده و یک گیت «یا» ساخت.

با زنجیر کردن جمع‌کننده‌های کامل، رقم نقلی از بیت کم‌ارزش به بیت پرارزش می‌رسد. یک جمع‌کنندهٔ سی‌ودوبیتی از سی‌ودو جمع‌کنندهٔ کامل ساخته می‌شود. در پردازنده‌های واقعی، برای افزایش سرعت از روش‌هایی استفاده می‌شود که رقم نقلی را پیش‌بینی می‌کنند و منتظر انتشار پشت‌سرهم نمی‌مانند.

تفریق با همان جمع‌کننده و مکمل دو انجام می‌شود. ضرب و تقسیم هم با مدارهای پیچیده‌تر ولی از همین بلوک‌ها ساخته می‌شوند. این نشان می‌دهد که حتی عملیات پیچیدهٔ ریاضی در پایین‌ترین سطح چیزی جز ترکیب گیت‌های ساده نیست، و پیچیدگی از تعداد زیاد و ترتیب درست آن‌ها می‌آید.

۷. حافظه چطور بیت‌ها را نگه می‌دارد؟

پردازش تنها نیمی از کار است؛ باید بتوان بیت‌ها را نگه داشت. ساده‌ترین سلول حافظه با گیت‌هایی ساخته می‌شود که خروجی آن‌ها به ورودی یکدیگر برمی‌گردد و بیت را در خود حفظ می‌کند. به این مدار لچ یا فلیپ‌فلاپ می‌گویند. هر سلول به ترانزیستورهای متعدد نیاز دارد.

حافظهٔ ایستا یا اس‌رم از همین سلول‌ها ساخته می‌شود. سریع است ولی فضای زیادی می‌گیرد، پس در حافظهٔ نهان داخل پردازنده به‌کار می‌رود. حافظهٔ پویا یا دی‌رم هر بیت را در یک خازن ریز نگه می‌دارد. خازن به‌آرامی خالی می‌شود، پس حافظه باید هر چند میلی‌ثانیه تازه‌سازی شود. همین حافظهٔ اصلی، یعنی رم، است.

رم با قطع برق اطلاعاتش را از دست می‌دهد. برای ذخیرهٔ دائمی از حافظهٔ فلش در حافظه‌های اس‌اس‌دی و کارت‌ها استفاده می‌شود که بار الکتریکی را در لایه‌ای عایق به دام می‌اندازد و بدون برق هم نگه می‌دارد. دیسک‌های سخت قدیمی‌تر بیت را با جهت مغناطیسی روی صفحهٔ گردان ثبت می‌کنند.

حافظه‌ها سلسله‌مراتب دارند. ثبات‌های داخل پردازنده سریع‌ترین و کم‌ظرفیت‌ترین‌اند، بعد حافظهٔ نهان، سپس رم و بعد از آن اس‌اس‌دی یا دیسک. هر پایین‌تر که برویم، ظرفیت بیشتر و ارزان‌تر ولی کندتر می‌شود. طراحی خوب سیستم یعنی داده‌های پرمصرف را جایی نگه دارد که پردازنده سریع‌تر به آن‌ها برسد.

۸. پردازنده چه کاری انجام می‌دهد؟

پردازنده یا سی‌پی‌یو مغز مرکزی کامپیوتر نیست؛ بیشتر شبیه یک اجراکنندهٔ بسیار سریع و بی‌ابتکار است که دستورهای ساده را پشت سر هم اجرا می‌کند. هر دستور چیزی مثل «این دو عدد را جمع کن» یا «این مقدار را از حافظه بخوان» است. قدرت پردازنده از سرعت اجرای میلیاردها دستور در ثانیه می‌آید.

اجزای اصلی آن عبارت‌اند از واحد حساب و منطق که محاسبه می‌کند، ثبات‌ها که داده‌های فعلی را نگه می‌دارند، شمارندهٔ برنامه که آدرس دستور بعدی را دارد و واحد کنترل که همه را هماهنگ می‌کند. این اجزا با مسیرهایی به نام گذرگاه به حافظه وصل‌اند. چرخهٔ کاری آن همیشه در مراحل زیر تکرار می‌شود.

  1. واکشی: دستور بعدی از حافظه خوانده می‌شود
  2. رمزگشایی: واحد کنترل معنی دستور را تشخیص می‌دهد
  3. اجرا: واحد حساب و منطق یا حافظه عمل لازم را انجام می‌دهد
  4. نوشتن نتیجه: خروجی در ثبات یا حافظه ذخیره می‌شود

هر برنامه‌ای که اجرا می‌کنید، از مرورگر تا بازی، در نهایت تبدیل به دنباله‌ای از همین دستورهاست. پردازنده‌ها خانواده‌های مختلفی دارند و هر خانواده مجموعه‌دستور خود را دارد. برنامه‌ای که برای یک خانواده ساخته شده، بدون ترجمه یا شبیه‌سازی روی خانوادهٔ دیگر اجرا نمی‌شود.

پردازنده‌های امروزی برای سریع‌تر شدن از ترفندهایی مثل خط لوله بهره می‌برند: هنگامی که یک دستور در حال اجراست، دستور بعدی از قبل رمزگشایی می‌شود. همچنین پیش‌بینی انشعاب و اجرای خارج از ترتیب به بهره‌وری کمک می‌کند. این روش‌ها پیچیده‌اند ولی هدف همه یکی است: کار بیشتر در هر ثانیه و بدون تغییر نتیجه.

۹. ساعت و هسته چه نقشی دارند؟

برای هماهنگی همهٔ مدارها، یک ساعت الکترونیکی با ضرب‌آهنگ ثابت وجود دارد. هر تپش ساعت به مدارها اجازه می‌دهد وضعیت خود را به‌روز کنند. سرعت ساعت را با هرتز می‌سنجند و یک گیگاهرتز یعنی یک میلیارد تپش در ثانیه. دستورهای ساده ممکن است در یک تپش اجرا شوند و دستورهای پیچیده چند تپش لازم دارند.

بالاتر بردن فرکانس همیشه راه‌حل نیست. هر تپش ترانزیستورها را می‌چرخاند و گرما می‌سازد. گرمای زیاد مصرف برق را بالا می‌برد و تراشه را در خطر می‌گذارد. به همین دلیل، پس از مدتی سازندگان به‌جای افزایش بی‌حد فرکانس، تعداد هسته‌ها را بیشتر کردند و هر هسته مانند یک پردازندهٔ کامل است.

چند هسته به برنامه اجازه می‌دهد چند کار را هم‌زمان انجام دهد، به شرطی که برنامه برای موازی‌سازی نوشته شده باشد. بعضی کارها، مثل پردازش تصویر، به‌خوبی موازی می‌شوند ولی بعضی دیگر مراحلشان وابسته به هم است و نمی‌توان آن‌ها را با هسته‌های بیشتر سریع‌تر کرد.

کارت‌های گرافیک نمونهٔ دیگری از موازی‌سازی‌اند. هزاران هستهٔ کوچک دارند که محاسبهٔ ساده را روی بسیاری از داده‌ها هم‌زمان انجام می‌دهند. این ساختار برای بازی، تدوین ویدیو و محاسبات علمی عالی است ولی برای کارهایی که شاخه‌های منطقی زیاد دارند مناسب نیست.

۱۰. از کد برنامه تا دستور ماشین

برنامه‌نویسان معمولاً به زبان‌هایی مثل پایتون، سی یا جاوا می‌نویسند که برای انسان خواناست، نه برای پردازنده. برای اجرا باید این متن به دستورهای ماشین تبدیل شود. در بعضی زبان‌ها یک مترجم به نام کامپایلر کل برنامه را پیش از اجرا به کد ماشین ترجمه می‌کند و فایل اجرایی تولید می‌شود.

در زبان‌های دیگر، مثل پایتون، مفسر برنامه را حین اجرا می‌خواند. پایتون ابتدا کد را به قالب میانی به نام بایت‌کد تبدیل می‌کند و ماشین مجازی آن را اجرا می‌کند. اگر کنجکاوید، با ماژول مخصوص می‌توانید ببینید یک عبارت ساده به چه دستورهایی تبدیل می‌شود. فرمان نمونه را در بلوک زیر ببینید.

import dis
dis.dis(lambda a, b: a + b)

پایین‌تر از زبان‌های سطح بالا، زبان اسمبلی قرار دارد که هر دستور ماشین را با نامی قابل‌خواندن نشان می‌دهد، مثل نام‌هایی برای جمع یا انتقال داده. اسمبلر آن را به بیت‌ها تبدیل می‌کند. امروز کمتر کسی مستقیم با اسمبلی کار می‌کند، ولی برای بهینه‌سازی و نوشتن بخش‌های حساس سیستم هنوز اهمیت دارد.

این لایه‌بندی کار برنامه‌نویس را آسان می‌کند. او کافی است بگوید چه می‌خواهد؛ کامپایلر یا مفسر تصمیم می‌گیرند چگونه آن را با دستورهای پردازنده انجام دهند. به همین دلیل یک برنامهٔ واحد با تغییر جزئی می‌تواند روی دستگاه‌های مختلف اجرا شود، بدون آن که برنامه‌نویس با مدارهای هر پردازنده سروکار داشته باشد.

۱۱. سیستم‌عامل بین سخت‌افزار و برنامه چه می‌کند؟

اگر هر برنامه مستقیم با سخت‌افزار حرف می‌زد، همه‌چیز آشفته می‌شد. سیستم‌عامل، مثل ویندوز، لینوکس یا اندروید، میان برنامه‌ها و سخت‌افزار قرار می‌گیرد و منابع را مدیریت می‌کند: زمان پردازنده، حافظه، فایل‌ها و دستگاه‌های ورودی و خروجی را بین برنامه‌ها تقسیم می‌کند.

وقتی چند برنامه هم‌زمان باز است، در واقع پردازنده بین آن‌ها با سرعت بسیار زیاد جابه‌جا می‌شود و به هر کدام برش‌های کوتاه زمان می‌دهد. این کار زمان‌بندی نام دارد و باعث می‌شود به نظر برسد که همه هم‌زمان اجرا می‌شوند. در پردازنده‌های چندهسته‌ای، برخی برنامه‌ها واقعاً هم‌زمان اجرا می‌شوند.

سیستم‌عامل برای هر برنامه فضای حافظهٔ جداگانه می‌سازد تا یک برنامه نتواند به داده‌های دیگری دست بزند. درایورها هم نرم‌افزارهایی‌اند که زبان هر قطعه، مثل چاپگر یا کارت گرافیک، را به سیستم‌عامل می‌فهمانند. سیستم فایل نیز تعیین می‌کند داده‌ها روی دیسک چگونه سازمان‌دهی و پیدا شوند.

وقتی برنامه‌ای قفل می‌کند، معمولاً سیستم‌عامل می‌تواند آن را بدون خاموش‌کردن کل دستگاه ببندد، چون هر برنامه در جعبهٔ مجزای خود است. این جداسازی یکی از مهم‌ترین عوامل پایداری و امنیت است و در نبود آن یک خطا در یک برنامه می‌توانست کل سیستم را از کار بیندازد.

۱۲. محدودیت‌های محاسبات دیجیتال

کامپیوتر با همهٔ قدرتش محدودیت دارد. نمونهٔ معروف، اعداد اعشاری است. عدد ۰٫۱ در سیستم دودویی دقیقاً قابل نمایش نیست، همان‌طور که یک سوم در سیستم دهدهی دقیقاً نوشته نمی‌شود. به همین دلیل در بسیاری از زبان‌ها جمع ۰٫۱ و ۰٫۲ دقیقاً برابر ۰٫۳ نیست و تفاوت بسیار کوچکی دارد.

عددهای صحیح هم بازهٔ محدودی دارند. در یک عدد علامت‌دار سی‌ودوبیتی، بزرگ‌ترین مقدار حدود دو میلیارد و صد و چهل و هفت میلیون است. اگر محاسبه از آن فراتر برود، سرریز رخ می‌دهد و نتیجه به عدد منفی یا اشتباه می‌پیچد. چنین خطاهایی در تاریخ چند نرم‌افزار مهم مشکل ساخته‌اند و باید در طراحی لحاظ شوند.

محدودیت دیگر نظری است. آلن تورینگ نشان داد که مسائلی وجود دارند که هیچ برنامه‌ای نمی‌تواند برای همهٔ ورودی‌ها حل‌شان کند. مثلاً هیچ الگوریتمی نمی‌تواند برای هر برنامه و ورودی بگوید که آیا متوقف می‌شود یا نه. بعضی مسائل دیگر هم از نظر نظری قابل حل‌اند ولی زمان لازم برای آن‌ها از عمر عالم بیشتر است.

بنابراین نباید کامپیوتر را همه‌چیزدان یا بی‌خطا فرض کرد. نتیجهٔ محاسبه فقط به اندازهٔ داده‌ها، برنامه و فرض‌های آن درست است. شناخت اینکه کامپیوتر در لایه‌های پایین چطور کار می‌کند، به برنامه‌نویسان و کاربران کمک می‌کند دلیل خطاها را بفهمند و به خروجی‌ها با نگاه سنجیده‌تری اعتماد کنند.

برچسب‌های این مقاله
  • کامپیوتر چطور کار می کند
  • صفر و یک
  • سیستم دودویی
  • ترانزیستور
  • گیت منطقی
  • پردازنده
  • حافظه رم
  • کد ماشین
٪۴۱
دوره اختصاصی INZIP

دورهٔ جامع HTML از صفر

آموزش حرفه ای HTML از صفر در ۱۶ ویدیو: سند، متن، لینک، تصویر، جدول، فرم، معنایی‌سازی، دسترس‌پذیری و سئو، تا پروژهٔ کامل صفحهٔ فروشگاه محصول.

تماشای آنلاین + دانلود دسترسی آنی و همیشگی به‌روزرسانی رایگان کیفیت Full HD
۹۹۰,۰۰۰ تومان ۵۹۰,۰۰۰ تومان سود شما ۴۰۰,۰۰۰ تومان
مشاهده سریال