من أين جاءت إعلانات ثماني / عرافة؟ [مغلق

StackOverflow https://stackoverflow.com/questions/1835465

  •  11-09-2019
  •  | 
  •  

سؤال

بعد كل هذا الوقت، لم أفكر أبدا في طرح هذا السؤال؛ أنا أفهم أن هذا جاء من C ++، ولكن ما كان السبب وراء ذلك:

  • حدد الأرقام العشرية كما تفعل عادة
  • حدد أرقام أوكتال بمقدار 0
  • تحديد الأرقام السداسية عشرية من خلال 0x الرائدة

لماذا 0؟ لماذا 0x؟ هل هناك تقدم طبيعي للقاعدة -22؟

هل كانت مفيدة؟

المحلول

C، وجد سلف C ++ وجافا، في الأصل من قبل دينيس ريتشي على PDP-8S في أوائل السبعينيات. تلك الآلات لديها مساحة العنوان 12 بت, ، لذلك كانت المؤشرات (العناوين) 12 بت ممثلة طويلة وممثلة في التعليمات البرمجية من قبل ثلاثة أرقام ثمانية 4 بت (كلمة العنوان الأول ستكون 000 بوصتال، آخر كلمة كلمة 777octal).

لا يقوم Octal بعمل بايت من بايت 8 بت لأن كل رقم من رقم Octal يمثل ثلاثة بتات، لذلك سيكون هناك دائما بتات زائدة في تدوين الثماني. البايت البيطاني الكلائم (1111 1111) هو 377 في Octal، لكن FF في عرافة.

هيكس أسهل بالنسبة لمعظم الناس للتحويل من وإلى ثنائي في رؤوسهم، نظرا لأن الأرقام الثنائية عادة ما يتم التعبير عنها في كتل من ثمانية (لأن هذا هو حجم البايت) وثمانية أرقام سداسي عشرين تماما، لكن تدوين عرافة كان قد يكون clunky وتضليل في وقت دينيس (يعني القدرة على معالجة 16 بت). يحتاج المبرمجون إلى التفكير في ثنائي عند العمل مع الأجهزة (التي تمثل كل جزء عادة سلكا ماديا) وعند العمل مع المنطق البسيط (الذي كل بت لديه معنى محدد مبرمج).

وأوضح دينيس أضافت البادئة 0 باعتبارها أبسط تباين ممكن على الأرقام العشرية اليومية، وأسهل لتلك المحللين المبكرين للتمييز.

أعتقد أنه تمت إضافة ترميز HEX 0x__ إلى C قليلا. تميز شجرة التحليل المترجم للتمييز 1-9 (الرقم الأول الثابت العشري)، 0 (أول رقم [ضئيل] من الثابت من الثمان)، و 0x (يشير إلى ثابت عرافة لمتابعة الأرقام اللاحقة) من بعضها البعض أكثر بكثير معقدة من مجرد استخدام رائد 0 كمؤشر للتبديل من تحليل الأرقام اللاحقة كما ثماني وليس عشري.

لماذا دنيس تصميم بهذه الطريقة؟ المبرمجين المعاصرين لا تقدر أن تلك أجهزة الكمبيوتر المبكرة كانت تسيطر عليها في كثير من الأحيان عن طريق تبديل التعليمات إلى وحدة المعالجة المركزية عن طريق التقليب جسديا مفاتيح على لوحة CPUS الأمامية، أو مع بطاقة لكمة أو شريط ورقي؛ تمثل جميع البيئات حيث تمثل توفير خطوات أو تعليمات قليلة مدخرات للعمل اليدوي الكبير. أيضا، كانت الذاكرة محدودة ومكلفة، لذلك يوفر حتى بعض التعليمات قيمة عالية.

باختصار: 0 لبرنامج Octal لأنه كان يتضح بكفاءة وأكتيم كان سهل الاستخدام على PDP-8S (على الأقل لمعالجة العنوان)

0x ل Hex ربما لأنه كان امتدادا طبيعيا متوافقا معيارا في معيار البادئة ثماني وما زال فعالا نسبيا لتحليله.

نصائح أخرى

البادئة الصفرية للحصول على Octal، و 0x ل Hex، هي من الأيام الأولى ل UNIX.

يعود سبب تواريخ وجود Octal إلى متى كان هناك أجهزة مع بايت 6 بت، والتي جعلت ثمكتال الخيار الطبيعي. يمثل كل رقم من رقم Octal 3 بت، لذلك البايت 6 بت هو رقمين ثمانيين. الشيء نفسه ينطبق على عرافة، من بايت 8 بت، حيث يكون رقم سداسي عشري 4 بت وبالتالي بايت هو رقم سهم. يتطلب استخدام Octal ل Bytes 8 بت 3 أرقام ثمانية، والتي يمكن لأول منها أن يكون لدى الأول فقط القيم 0، 1، 2 و 3 (الرقم الأول هو حقا "Tetral"، وليس Octal). لا يوجد سبب للذهاب إلى BEASE32 ما لم يطور شخص ما نظاما فيه بايتات طويلة عشرة بت، لذلك يمكن تمثيل بايت من عشر بت كائنين "في القربان" 5 بت.

كان على الأرقام "الجديدة" أن تبدأ مع رقم، للعمل مع بناء الجملة الحالي.

كانت الممارسة المعمول بها أسماء متغيرة ومعرفات أخرى تبدأ بحرف (أو عدد قليل من الرموز الأخرى، ربما قم بإلغاء التأكيد أو علامة الدولار). لذلك "A"، "ABC"، و "A04" هي جميع الأسماء. تبدأ الأرقام برقم. لذلك "3" و "3E5" هي أرقام.

عند إضافة أشياء جديدة إلى لغة برمجة، تسعى لجعلها تتناسب مع بناء الجملة والقواعد والقواعد والدليل الموجودة، وتحاول جعل التعليمات البرمجية الحالية متابعة العمل. لذلك، فلن ترغب في تغيير بناء الجملة لجعل "X34" رقم سداسي عشري أو "O34" رقم Octal.

لذلك، كيف تناسب الأرقام ثماني في بناء هذا الجملة؟ أدرك شخص ما، باستثناء "0"، ليست هناك حاجة للأرقام التي تبدأ ب "0". لا يحتاج أحد لكتابة "0123" ل 123. لذلك نحن نستخدم الصفر الرائد للدلالة على الأرقام ثماني.

ماذا عن الأرقام الست عشرية؟ يمكنك استخدام لاحقة، بحيث تعني "34x" 3416. وبعد ومع ذلك، فإن المحلل المحلل يجب أن يقرأ طوال الطريق إلى نهاية الأرقام قبل أن يعرف كيفية تفسير الأرقام (ما لم يواجه أحد أرقام "F"، والتي من شأنها أن تشير بالطبع إلى سداسي عشري). إنه "أسهل" على المحللين لمعرفة أن الأرقام هي سداسي عشري في وقت مبكر. ولكن لا يزال عليك البدء برقم، وقد تم بالفعل استخدام خدعة الصفر، لذلك نحن بحاجة إلى شيء آخر. تم اختيار "x"، والآن لدينا "0x" لسداسي عشري.

(ما ورد أعلاه يعتمد على فهمي لتحليل وبعض التاريخ العام حول تطوير اللغة، وليس على معرفة القرارات المحددة التي أدلى بها مطوري مترجم أو لجان اللغة.)

لا أدري ...

0 هو 0ctal

0x هو لصالح، حسنا، لقد استخدمنا بالفعل 0 ليعني ثمكتال وهناك X في السددي الشيخي، لذا فإنه في هناك أيضا

أما بالنسبة للتقدم الطبيعي، فستطلع إلى أحدث لغات البرمجة التي يمكن أن تلحق بثبات مثل

123_27 (تفسير _ لتعبير منخفض)

وما إلى ذلك وهلم جرا

?

علامة

هل هناك تقدم طبيعي للقاعدة -22؟

هذا جزء من سبب استخدام ADA النموذج 16 # لإدخال ثوابت Hex، 8 # للحصول على الثماني، 2 # ثنائي، إلخ.

لن أثير نفسي أكثر من اللازم في الحاجة إلى مساحة "النمو في المستقبل" في المساواة رغم ذلك. هذا ليس مثل ذاكرة الوصول العشوائي أو معالجة المساحة حيث تحتاج إلى ترتيب من حيث الحجم كل جيل.

في الواقع، أظهرت الدراسات أن الخرز والرقم هي إلى حد كبير مكان جميل للحصول على تمثيلات قابلة للقراءة من قبل الإنسان المتوافقين الثنائي. إذا ذهبت أقل من Octal، فستبدأ في طلب عدد كبير من الأرقام لتمثيل أرقام أكبر. إذا ذهبت أعلى من عرافة، فإن جداول الرياضيات كبيرة بضيقع. HEX هو في الواقع كثيرا جدا بالفعل، ولكنكتال لديه مشكلة في أنه لا يصلح بالتساوي في بايت.

هناك ترميز قياسي ل base32.. وبعد انها تشبه إلى حد بعيد base64.. وبعد لكنها ليست مريحة جدا للقراءة. يتم استخدام Hex لأن 2 أرقام سداسي عشرية يمكن استخدامها لتمثيل 1 بايت 8 بت. وتم استخدام Octal في المقام الأول للأنظمة القديمة التي استخدمت 12 بت بايت. مصنوعة من أجل تمثيل أكثر إحكاما للبيانات بالمقارنة مع عرض السجلات الخام بثنائي.

تجدر الإشارة أيضا إلى أن بعض اللغات تستخدم O ### ل Octal و X ## أو H ## ل Hex، وكذلك، العديد من الاختلافات الأخرى.

أعتقد أنه 0x جاء بالفعل لعالم UNIX / Linux وتم استلامه بواسطة C / C ++ ولغات أخرى. لكنني لا أعرف السبب الدقيق أو الأصل الحقيقي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top