JavaRush /مدونة جافا /Random-AR /جافا: البتات والبايتات
Viacheslav
مستوى

جافا: البتات والبايتات

نشرت في المجموعة
جافا: البتات والبايت - 1

مقدمة

إذا كان الأشخاص يقومون بالعد في نظام الأرقام العشري، فإن أجهزة الكمبيوتر يتم حسابها في النظام الثنائي. ويجب أن يفهم المبرمج كيفية التحدث إلى كل من الأشخاص وأجهزة الكمبيوتر. يجب أن تساعد هذه المراجعة في هذا الأمر. في بعض الأحيان يكون هناك عالم كامل مخفي وراء ما هو واضح. أقترح التحدث عن هذا العالم. على سبيل المثال، هناك 7 أيام في الأسبوع. والآن دعونا نجيب على السؤال: ما هو الرقم "7"؟ ) أولاً: هو عدد طبيعي (موجب). وهو أيضًا رقم عشري. الرقم العشري هو رقم في النظام العشري. عندما نقول "نظام الأرقام العشري"، فهذا يعني أن نظام الأرقام له أساس 10 . يُظهر الجذر عدد الأرقام التي يمكن استخدامها في نظام أرقام معين لتمثيل رقم. العد التنازلي يبدأ من الصفر . وبناء على ذلك، لتمثيل الأرقام في نظام الأرقام العشري، نستخدم الأرقام من 0 إلى 9. وهذا أمر جيد، ولكننا نحتاج إلى العد ليس فقط إلى 9، ولكن أيضًا إلى أبعد من ذلك. كيف تكون؟ على سبيل المثال، الرقم 10. لكتابة هذا الرقم، نستخدم ما يصل إلى رقمين. يسمى موضع كل رقم في النظام العشري بالمنزلة العشرية. يتم حساب الأرقام من اليمين إلى اليسار:
جافا: البتات والبايت - 2
بالإضافة إلى ذلك، يمكن توسيع الرقم العشري على النحو التالي: 103 = 1*10^2 + 0*10^1 + 3*10^0
جافا: البتات والبايت - 3
العدد ينمو بشكل أساسي من اليمين إلى اليسار. أي أنه في البداية كان 7، ثم أصبح 10. ولذلك يتم حساب الأرقام من اليمين، بدءاً من الصفر. لماذا كل هذا؟ هذا لأننا لسنا أجهزة كمبيوتر. وبينما نحسب بالنظام العشري (أي الأساس 10)، فإن أجهزة الكمبيوتر تحسب بالنظام الثنائي (أي الأساس 2). لكن القواعد التي تنطبق في أنظمة الأرقام هذه هي نفسها.
جافا: البتات والبايت - 4

النظام الثنائي

النظام الثنائي يشبه إلى حد كبير النظام العشري، مع الاختلاف الوحيد هو أن الحد هنا ليس 10، بل 2. دعونا نقارن ذلك بمثال. كيف نمثل 11 في ثنائي؟ الأمر بسيط للغاية: ما عليك سوى قسمة الرقم العشري على الأساس 2، أي العد 11/2 في عمود. مثال:
جافا: البتات والبايت - 5
أو هنا مثال من WikiHow:
جافا: البتات والبايت - 6
ومن المثير للاهتمام أنه يمكننا تمثيل رقم بالنظام الثنائي بنفس الطريقة كما في النظام العشري: 111 بالنظام الثنائي = 1*2^2 + 1*2^1 + 1*2^0 = 4 + 2 + 1
جافا: البتات والبايت - 7
يمكن رؤية مثال للتحويل من النظام الثنائي إلى النظام العشري في الآلة الحاسبة الموجودة على الإنترنت . بالحديث عن حقيقة أن قواعد التشغيل في أنظمة الأعداد هي نفسها، فلننظر إلى الجمع في النظام الثنائي:
جافا: البتات والبايت - 8
كما ترون، نقوم بنقل الأرقام أثناء الجمع بنفس الطريقة كما في النظام العشري. يمكن رؤية تحليل الإضافة، على سبيل المثال، هنا: بالمناسبة، يتم ذكر بعض كلمة "التفريغ" بشكل دوري. وما هو؟ المكان هو مجرد "عنصر بنيوي" لتمثيل الرقم. أي أن الرقم 10 يتكون من رقمين: نحتاج إلى رقمين ومكانين وعنصرين لكتابة هذا الرقم. من المهم بالنسبة لنا أن نفهم هذا لأنه في نظام الأرقام الثنائية، الرقم هو قليلا . تأتي كلمة Bit من الكلمة الإنجليزية "binary digit" ، أي رقم ثنائي. يمكن أن يكون إما 0 أو 1. ولكن مثلما نقرأ الأرقام والكلمات ككل، وليس حرفًا بحرف، فإن أجهزة الكمبيوتر لا تقرأ شيئًا واحدًا في كل مرة. للحصول على الحد الأدنى من المعلومات المعالجة في ذاكرة الوصول العشوائي (ما يسمى بأصغر وحدة معلومات قابلة للعنونة)، تتم قراءة تسلسل من 8 بتات . وبما أن هناك 8 منهم، فإن هذا يسمى "الثماني". وأيضًا - الكلمة الأكثر شهرة بايت . لتتذكر الثماني، يمكنك أن تتذكر أن كلمة الأخطبوط (ثمانية أرجل) تُترجم إلى الإنجليزية على أنها أخطبوط. أي أن هنا بالضبط نفس كلمة "octo" في العنوان:
جافا: البتات والبايت - 9
دعونا نفكر في ما هو الحد الأقصى للرقم الذي يمكننا تمثيله بـ 8 بتات؟
جافا: البتات والبايت - 10
وهنا يطرح السؤال: ماذا عن الأرقام السالبة؟ لفهم هذا، دعونا نتحدث عن كيفية تمثيل البايتات في جافا
جافا: البتات والبايت - 11

جافا وبايت

كيف يمكننا استخدام الأرقام السالبة في جافا؟ يتم ذلك ببساطة. في Java، يتم توقيع البايتات. يتم إنشاء الرقم/البت الموجود في أقصى اليسار (يُسمى أيضًا "البت الأكثر أهمية") كنوع من "علامة" تجيب على السؤال: "هل هذا الرقم سالب؟" إذا كانت الإجابة بنعم، فإن العلامة لها القيمة 1. وإلا فهي 0. دعونا نلقي نظرة على مثال لكيفية تحويل الرقم 5 إلى رقم سالب 5:
جافا: البتات والبايت - 12
بناءً على هذه الصورة، يمكنك فهم الحدود التي تقع ضمنها قيمة البايت:
جافا: البتات والبايت - 13
ومن الواضح أيضًا أن:
  • وإذا أضفنا واحدًا إلى 127، نحصل على -128.
  • وإذا طرحنا واحدًا من -128، نحصل على 127.
وبالتالي، يمكن للبايت في Java أن يأخذ قيمة من -128 إلى 127. كما نتذكر، البايت هو ثماني بتات. والحد الأقصى للرقم/البت الأكثر أهمية له رقم تسلسلي 7، لأننا نعد من الصفر. في هذه الحالة، من السهل أن نتذكر أن البايت يساوي -2 أس 7 (الحد الأدنى) إلى 2 أس 7 ناقص 1 (الحد الأعلى). العمل مع نوع البيانات نفسه أمر بسيط. نستخدم مترجم Java عبر الإنترنت "repl.it" باعتباره "وضع الحماية" لهذه المقالة. https://repl.it/languages/java. على سبيل المثال، لنقم بتشغيل التعليمات البرمجية التي ستمثل متغير بايت في شكل ثنائي كسلسلة:
class Main {
  public static void main(String[] args) {
    byte octet = 5;
    String bin = String.format("%8s", Integer.toBinaryString(octet)).replace(' ', '0');
    System.out.println(bin);
  }
}
يتم استخدام العمل بالبايتات بشكل نشط عند العمل مع تدفقات الإدخال/الإخراج. يمكنك قراءة المزيد في البرنامج التعليمي من Oracle: " I/O Streams ". بالإضافة إلى ذلك، في Java يمكنك استخدام حرف خاص لتحديد القيمة كبتات:
class Main {
  public static void main(String[] args) {
    byte data = 0b101;
    System.out.println(data);
  }
}
جافا: البتات والبايت - 14

التلاعب بالبت

عند الحديث عن البايتات والبتات، لا يسع المرء إلا أن يذكر عمليات التلاعب المختلفة بالبتات. ربما تكون العملية الأكثر شيوعًا هي التحولات (إزاحة البت أو إزاحة البت). وكل ذلك لأن نتائجها لها فوائد عملية واضحة. ما الفائدة؟ إن الإزاحة إلى اليسار بمقدار N من المواضع يعادل ضرب الرقم في 2N. والانتقال إلى اليمين يشبه نفس القسمة، وبالتالي 5<<2 == 5*Math.pow(2,2) ولفهم سبب ذلك، دعونا ننظر إلى هذا المثال بمزيد من التفصيل:
جافا: البتات والبايتات - 15
إن نفي البتات NOT (البت الأحادي)، والذي يتم تمثيله بواسطة التلدة، يؤدي إلى عكس البتات. يتم كتابته كعلامة التلدة، على سبيل المثال ~5.
public static void main(String[] args) {
	System.out.println(~5); //-6
 	System.out.println(~-5);//4
}
يوضح هذا مرة أخرى أنه عندما تقوم Java بتغيير علامة الرقم، بالإضافة إلى عكس قيم البت في النهاية، فإننا نقوم بإجراء +1. وبدون هذا، كما نرى، يتغير الرقم 5. ولكي يظل هو نفس الرقم الذي كان عليه قبل تغيير الإشارة، عليك إجراء +1. يسمح لك Bitwise AND بترك رقمين مختلفين بالقيمة 1 للبت فقط إذا كانت جميع البتات لها قيمة واحدة. الأمر المثير للاهتمام في هذا هو أنه يحتوي على بعض فوائد التطبيق:
int x=4;
System.out.println((x&1) != 1);
يتحقق هذا الرمز من الرقم x للتأكد من التكافؤ. لنلقي نظرة على مثال:
جافا: البتات والبايت - 16
باستخدام Bitwise AND وBitwise OR معًا، يمكنك استخدام الأقنعة:
public static void main(String[] args) {
    byte optionA=0b0100;
    byte optionB=0b0010;
    byte optionC=0b0001;
    byte value = (byte)(optionB | optionC);
    // Check for optionB
    if ((optionC & value) != 0b0000) {
      System.out.println("Yes");
    } else {
      System.out.println("No");
    }
  }
راجع " خيارات الإخفاء باستخدام معاملات البت في Java " لمزيد من التفاصيل. يعد التلاعب بالبت موضوعًا مثيرًا للاهتمام حيث تمت كتابة مراجعات ومقالات وكتب منفصلة عنه. ومن هنا يبدأ الطريق الطويل نحو التشفير. كجزء من هذه المراجعة، يجدر بنا أن نفهم لماذا يعمل وكيف. لمزيد من المعلومات حول عمليات البت، أوصي بقراءة المراجعة من tproger: “ حول عمليات البت ”.

أنواع بدائية

لذلك، البايت هو ثماني، أي 8 بت. من السهل أن تتذكر أنه يوجد في Java أيضًا 8 أنواع بدائية، بالصدفة. النوع البدائي هو نوع بيانات مضمن في لغة برمجة، وهو متاح افتراضيًا. البايت هو أصغر نوع بيانات بدائي من حيث مساحة الذاكرة التي يمكن لـ Java التعامل معها. كما قلنا سابقًا، البايت يشغل 8 بتات. لذلك، فإن الرقم الأكثر أهمية هو الرقم 7. لذلك، تحتوي البايت على القيم من -2 إلى القوة السابعة إلى 2 إلى القوة السابعة ناقص 1 من النتيجة. ما هي الأنواع البدائية الأخرى الموجودة:
جافا: البتات والبايت - 17
كما نرى من الجدول، تتضاعف أنواع البيانات من حيث كمية البيانات المشغولة. أي أن Short = 2 * بايت، و int = 2 * قصير. من السهل في الواقع أن نتذكر. تذكر أن البايت = 8 بت. يتم أيضًا تذكر حقيقة أنه لا يمكن أن يكون أقل. في اللغة الإنجليزية، يسمى العدد الصحيح عددًا صحيحًا. النوع البدائي منه كان يسمى الاختصار int. هناك عدد صحيح منتظم - int. هناك نسخة قصيرة، قصيرة، ونسخة طويلة، طويلة. وفقًا لذلك، يشغل int 32 بت (4 بايت). النسخة القصيرة أصغر مرتين - 16 بت (2 بايت)، والنسخة الطويلة أكبر بمرتين، أي. 64 بت (8 بايت). لذلك يمكن لـ int على الأكثر تخزين عدد يبلغ حوالي 2 مليار ومائة مليون. ويمكن لفترة طويلة تخزين ما يصل إلى حوالي 9 كوادريليون كحد أقصى (كلمة لطيفة). تذكر النكتة القديمة حول كيف يعتقد المبرمج المبتدئ أن هناك 1000 بايت في الكيلو بايت، ويعتقد المبرمج الكامل أن هناك 1024 جرامًا في الكيلوجرام، يمكننا أن نفهم:
1 mb = 1024 Kbyte = 1024 * 1024 = 1048576 bytes
1 int = 4 bytes
1 mb = 262144 int
بالمناسبة، ربما لاحظ القارئ اليقظ أن هناك 7 أنواع فقط في الصورة. 8 النوع البدائي منطقي. boolean هو نوع بيانات منطقي يحتوي على قيمتين فقط: صحيح وخطأ. ولكن السؤال الذي يطرح نفسه - ما هو حجمه؟ مواصفات جهاز Java الظاهري والقسم " 2.3.4. النوع المنطقي " سوف يجيب علينا:
جافا: البتات والبايت - 18
وهذا يعني أن القيمة المنطقية فقط ستأخذ نفس مقدار int. إذا أعلنا عن مصفوفة منطقية، فسيشغل كل عنصر في المصفوفة بايتًا واحدًا. هذه هي المعجزات :)

خاتمة

أقترح عليك أن تتعرف على بعض المواد الإضافية لدمجها: # فياتشيسلاف
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION