اندیان: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
FreshmanBot (بحث | مشارکت‌ها)
جز ←‏فایل ها: اصلاح فاصله مجازی با استفاده از AWB
FreshmanBot (بحث | مشارکت‌ها)
جز اصلاح فاصله مجازی + اصلاح نویسه با استفاده از AWB
خط ۷:
== در علم کامپیوتر ==
[[پرونده:Little-Endian.svg|بندانگشتی|چپ|لیتل اندین]]
هر [[بایت]] از [[حافظه (رایانه)|حافظه]] آدرس منحصر به فرد خود را داراست و محتوای یک [[متغیر]] n بایتی، یک خانه ی n بایتی را از حافظه را اشغال می کندمی‌کند. یک رایانه '''بیگ اندین''' بایت پرارزش متغیر را در ابتدایی ترینابتدایی‌ترین خانه حافظه ذخیره میکند، در حالیکه یک رایانه '''لیتل اندین''' کم ارزش ترینارزش‌ترین بایت متغیر را در ابتدایی ترینابتدایی‌ترین خانه حافظه ذخیره مینماید. چنانچه در شکلهای روبرو می بینیم اگر داده خود را 0A0B0C0D<sub>h</sub> در نظر بگیریم در سیستم هایسیستم‌های بیگ اندین 0A<sub>h</sub> در اولین خانه حافظه دخیره می‌شود در حالیکه در سیستم هایسیستم‌های لیتل اندین در آخرین فضای حافظه جای گرفته استگرفته‌است. برای داده 0000111111110000<sub>b</sub> نیز به همین ترتیب، ۸ بیت پر ارزش، یعنی 00001111<sub>b</sub> در سیستم بیگ اندین در ابتدایی ترینابتدایی‌ترین خانه حافظه و در سیستم لیتل اندین در آخرین خانه حافظه می گیردمی‌گیرد.
 
همچنین حالت سومی با نام ''میدل اندین'' یا Middle Endian وجود دارد که حالت هایحالت‌های بسیار متفاوتی دارد. مثلامثلاً در [[PDP-11]] کامپایلر مقادیر را مانند روش بیگ اندین اما با فرمت ۱۶ بیتی لیتل اندین ذخیره می کندمی‌کند. به عنوان مثال، مقدار ۳۲ بیتی 0A0B0C0D<sub>h</sub> همان طور که در شکل زیر مشخص است، به صورت 0B0A0D0C<sub>h</sub> ذخیره می شودمی‌شود. این حالت خاص، به ''لیتل اندین ۱۶ بیتی'' یا ''16 Bit Little Endian'' معروف است.
 
{| cellpadding="4" style="border-collapse: collapse; margin: 0.4em 0.4em; text-align: center;"
خط ۲۴:
 
== بی اندین ==
سخت افزار هایافزار‌های دارای معماری '''بی اندین''' قابلیت سوئیچ بین دو حالت بیگ اندین و لیتل اندین را در [[سگمنت داده]]، [[سگمنت کد]] یا هر دو [[سگمنت]] را دارد. بسیاری از این سخت افزارها قابلیت انتخاب فرمت پیش فرض اندین را از طریق نرم افزار دارند، اما در برخی از آنهاآن‌ها نیز حالت اندین را مادربرد انتخاب می کندمی‌کند و قابل تغییر نیست.
 
== تفاوت هاتفاوت‌ها ==
در حالت لیتل اندین، در صورتی که مقدار AB000000<sub>h</sub> در خانه‌ای ۴ بایتی از حافظه قرار داشته باشد، و چهار متغیر داشته باشیم که به این خانه از حافظه اشاره کنند، متغیر ۸ بیتی دارای AB<sub>h</sub>، متغیر ۱۶ بیتی دارای 00AB<sub>h</sub>، متغیر ۲۴ بیتی دارای 0000AB<sub>h</sub> و متغیر ۳۲ بیتی دارای 000000AB<sub>h</sub> خواهد بود. که در همه این چهار متغیر، مقدار مقدار عددی برابر با هم را خواهند داشت. هرچند این قابلیت سیستم هایسیستم‌های لیتل اندین بسیار به ندرت توسط برنامه نویسان یک [[زبان برنامه نویسیبرنامه‌نویسی سطح بالا]] مانند [[زبان سی شارپ]] استفاده می شود،می‌شود، اما در برخی زبان‌ها مانند [[زبان اسمبلی]] جهت بهینه سازی نرم افزار و همچنین سیستم عامل هاعامل‌ها بسیار کاربردی است. همچنین بسیاری از زبان هایزبان‌های سطح بالای امروزی مانند [[PHP]] چنین قابلیتی ندارند.
 
== سخت افزارها ==
معماری هایمعماری‌های مختلف از شیوه هایشیوه‌های متفاوتی استفاده می کنندمی‌کنند. به عنوان مثال در معماری ۳۲ بیتی [[x86]] اینتل و نسخه ۶۴ بیتی آن که به [[X86-64]] ای ام دی معروف است و امروزه در کامپیوترهای رومیزی استفاده هایاستفاده‌های فراوانی دارند، از سیستم لیتل اندین استفاده می شود،می‌شود، در حالی که در معماری IBM [[z/Architecture]] از سیستم بیگ اندین استفاده می شودمی‌شود. معماری [[ARM]] نیز که در دستگاه هایدستگاه‌های کوچک مانند تلفن هایتلفن‌های هوشمند و تبلت هاتبلت‌ها پرکاربرد هستند، بی اندین است و قابلیت سوییچ کردن بین حالت هایحالت‌های بیگ اندین، لیتل اندین و میدل اندین را داراست.
 
== شبکه ==
در شبکه، network order در بسیاری از [[RFC]] ها‌ها تعبیه شده استشده‌است. در صورتی که چنین چیزی در RFC مربوطه پیش بینیپیش‌بینی نشده باشد، معمولامعمولاً از روش بیگ اندین که در [[RFC 1700]] ( [[استاندارد اینترنت]] ) تعبیه شده است، استفاده می شود،می‌شود، هرچند تمامی پروتکل هاپروتکل‌ها به این روش پایبند نیستند.
 
== فایل هافایل‌ها ==
فایلفایل‌های های داده ایداده‌ای مانند فایل هایفایل‌های متنی txt، از روش بیگ اندین استفاده می کنندمی‌کنند اما فایل هایفایل‌های متنی یونیکد می توانندمی‌توانند با چند بایت خاص که به [[BOM]] مشهورند شروع شوند و نوع قرارگیری بایت هابایت‌ها را مشخص کنند.
فایل هایفایل‌های تصاویر TIFF نیز با توجه به اینکه دارای پرچمی خاص هستند، قابلیت استفاده از هر دو حالت را دارند.
بنابراین هر نوع فایل می‌تواند از هر روشی خاص جهت ذخیره سازی استفاده کنند و بستگی به شیوه مهندسی آن نرم افزار خاص دارد.
 
همچنین، فایل هایفایل‌های اجرایی برنامه ها، با توجه به نوع کامپایلر می‌تواند متفاوت باشد که این مسئله باعث میشودمی‌شود یک برنامه که توسط کامپایلر بیگ اندین کامپایل شده، در سیستم هایسیستم‌های لیتل اندین قابل اجرا نباشد. برخی از کامپایلر هاکامپایلرها قابلیت انتخاب ایندین توسط کاربر را دارند. برخی نیز به صورت خودکار، حالت ذخیره خود را تغییر می دهند و روی سخت افزارهای مختلف قابل اجرا هستند. در صورتی که کامپایلر از این قابلیت پشتیبانی نکند و برنامه نویسبرنامه‌نویس بخواهد که فایل کامپایل شده نرم افزارش بر روی تمامی سیستم هاسیستم‌ها اجرا شود باید خود دست به کار شود.
خروجی برخی زبان‌ها مانند [[Java]] و [[جاوااسکریپت]] و [[PHP]] مستقل از سخت افزار هستند. برنامه هایبرنامه‌های کامپایل شده JAVA، در زمان اجرا توسط JRE خوانده شده و با توجه به سخت افزار نوع آن انتخاب می‌شود اما PHP و JavaScript نیازی به کامپایل ندارند و مفسر PHP و مرورگر، آنهاآن‌ها را مانند یک فایل متنی خوانده و اجرا می کندمی‌کند. هرچند فایل هایفایل‌های PHP را می توانمی‌توان با نرم افزارهای مختلف کامپایل کرد و این فایل هافایل‌ها و باز هم مستقل از سخت افزار هستند، چون وابسته به خود مفسر php هستند.
زبان هایی که دارای مفسر هستند، مستقل از سخت افزار هستند، مانند زبان هایزبان‌های [[PHP]] و [[جاوااسکریپت]]. این زبان‌ها برخلاف زبان هایزبان‌های سطح پایین، معمولامعمولاً دسترسی چندانی به خانه هایخانه‌های حافظه نمی دهند، هرچند برای زبان هایی مانند PHP می توانمی‌توان [[افزونه]] هایی نوشت تا دسترسی به خانه هایخانه‌های حافظه را ممکن سازد اما در زبان هایی مانند JavaScript چنین چیزی به دلایل امنیتی غیر ممکنغیرممکن است.
 
== روش تغییر ایندین ==
نمونه کد زیر که به [[زبان C]] می باشد،می‌باشد، یک مقدار عددی ۳۲ بیتی بدون علامت را دریافت کرده و آن را از حالت بیگ اندین به لیتل اندین و بلعکس تبدیل می کندمی‌کند.
<source lang=c>
/* C function to change endianness for byte swap in an unsigned 32-bit integer */