JavaRush /جاوا بلاگ /Random-UR /جاوا: بٹس اور بائٹس
Viacheslav
سطح

جاوا: بٹس اور بائٹس

گروپ میں شائع ہوا۔
جاوا: بٹس اور بائٹس - 1

تعارف

اگر لوگ اعشاریہ نمبر کے نظام میں شمار کرتے ہیں، تو کمپیوٹر بائنری نظام میں شمار ہوتے ہیں۔ اور ایک پروگرامر کو یہ سمجھنا چاہیے کہ لوگوں اور کمپیوٹر دونوں سے کیسے بات کی جائے۔ یہ جائزہ اس معاملے میں مدد کرے گا۔ کبھی کبھی ظاہر کے پیچھے پوری دنیا چھپی ہوتی ہے۔ میں اس دنیا کے بارے میں بات کرنے کی تجویز کرتا ہوں۔ مثال کے طور پر، ہفتے میں 7 دن ہوتے ہیں۔ اب اس سوال کا جواب دیتے ہیں کہ نمبر "7" کیا ہے؟ ) سب سے پہلے، یہ ایک انٹیجر (مثبت) قدرتی نمبر ہے۔ یہ بھی ایک اعشاریہ نمبر ہے۔ اعشاریہ نمبر اعشاریہ نظام میں ایک عدد ہے۔ جب ہم کہتے ہیں "اعشاریہ نمبر کا نظام"، تو اس کا مطلب ہے کہ نمبر سسٹم کی بنیاد 10 ہے ۔ ریڈکس دکھاتا ہے کہ کسی نمبر کو ظاہر کرنے کے لیے دیے گئے نمبر سسٹم میں کتنے ہندسے استعمال کیے جا سکتے ہیں۔ الٹی گنتی صفر سے ہے۔ اس کے مطابق، اعشاریہ نمبر کے نظام میں اعداد کی نمائندگی کرنے کے لیے، ہم 0 سے 9 تک کے اعداد استعمال کرتے ہیں۔ یہ اچھی بات ہے، لیکن ہمیں صرف 9 تک ہی نہیں بلکہ اس سے آگے بھی گننے کی ضرورت ہے۔ کیسے بننا ہے؟ مثال کے طور پر، نمبر 10۔ اس نمبر کو لکھنے کے لیے، ہم زیادہ سے زیادہ 2 ہندسے استعمال کرتے ہیں۔ اعشاریہ نظام میں ہر ہندسے کی پوزیشن کو اعشاریہ جگہ کہا جاتا ہے۔ ہندسوں کو دائیں سے بائیں شمار کیا جاتا ہے:
جاوا: بٹس اور بائٹس - 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 دو ہندسوں پر مشتمل ہے: ہمیں اس نمبر کو لکھنے کے لیے 2 ہندسوں، 2 مقامات، 2 عناصر کی ضرورت ہے۔ ہمارے لیے یہ سمجھنا ضروری ہے کیونکہ بائنری نمبر سسٹم میں، ایک ہندسہ تھوڑا ہوتا ہے ۔ لفظ Bit انگریزی "binary digit" سے آیا ہے ، یعنی ایک بائنری نمبر۔ یہ یا تو 0 یا 1 ہو سکتا ہے۔ لیکن جس طرح ہم اعداد اور الفاظ کو مجموعی طور پر پڑھتے ہیں، اور حرف بہ حرف نہیں، کمپیوٹر ایک وقت میں تھوڑا سا نہیں پڑھتے ہیں۔ RAM میں پروسیس شدہ معلومات کے کم از کم "ٹکڑے" کے لیے (معلومات کی سب سے چھوٹی ایڈریس ایبل یونٹ)، 8 بٹس کی ترتیب پڑھی جاتی ہے ۔ چونکہ ان میں سے 8 ہیں، اس لیے اسے "آکٹیٹ" کہا جاتا ہے۔ اور یہ بھی - زیادہ معروف لفظ بائٹ ۔ آکٹیٹ کو یاد رکھنے کے لیے، آپ یاد رکھ سکتے ہیں کہ لفظ آکٹوپس (آٹھ ٹانگوں) کا انگریزی میں ترجمہ آکٹوپس کے طور پر کیا جاتا ہے۔ یعنی یہاں عنوان میں بالکل وہی "اکٹو" ہے:
جاوا: بٹس اور بائٹس - 9
آئیے اس کے بارے میں سوچتے ہیں کہ ہم 8 بٹس کے طور پر زیادہ سے زیادہ کیا نمبر دکھا سکتے ہیں؟
جاوا: بٹس اور بائٹس - 10
اور یہاں سوال پیدا ہوتا ہے: منفی نمبروں کا کیا ہوگا؟ اس کو سمجھنے کے لیے آئیے اس بارے میں بات کرتے ہیں کہ جاوا میں بائٹس کی نمائندگی کیسے کی جاتی ہے۔
جاوا: بٹس اور بائٹس - 11

جاوا اور بائٹ

یہ کیسے ہے کہ ہم جاوا میں منفی نمبر استعمال کر سکتے ہیں؟ یہ سادگی سے ہو گیا ہے۔ جاوا میں، بائٹس پر دستخط ہوتے ہیں۔ سب سے بائیں ہندسہ/بٹ (جسے "سب سے اہم بٹ" بھی کہا جاتا ہے) کو ایک قسم کا "مارکر" بنایا جاتا ہے جو اس سوال کا جواب دیتا ہے: "کیا یہ نمبر منفی ہے؟" اگر جواب ہاں میں ہے، تو مارکر کی قدر 1 ہے۔ دوسری صورت میں، یہ 0 ہے۔ آئیے ایک مثال دیکھتے ہیں کہ نمبر 5 کو منفی نمبر 5 میں کیسے تبدیل کیا جائے:
جاوا: بٹس اور بائٹس - 12
اس تصویر کی بنیاد پر، آپ ان حدود کو سمجھ سکتے ہیں جن کے اندر بائٹ ویلیو موجود ہے:
جاوا: بٹس اور بائٹس - 13
یہ بھی واضح ہے کہ:
  • اگر ہم 127 میں ایک کا اضافہ کریں تو ہمیں -128 ملے گا۔
  • اگر ہم -128 سے ایک کو گھٹائیں تو ہمیں 127 ملے گا۔
اس طرح، جاوا میں بائٹ -128 سے 127 تک ایک قدر لے سکتا ہے۔ جیسا کہ ہمیں یاد ہے، بائٹ ایک آکٹیٹ ہے۔ اور زیادہ سے زیادہ ہندسے/سب سے اہم بٹ کا سیریل نمبر 7 ہے، کیونکہ ہم صفر سے شمار کرتے ہیں۔ اس صورت میں، یہ یاد رکھنا آسان ہے کہ ایک بائٹ -2 کی طاقت 7 (نچلی حد) سے 2 کی طاقت 7 مائنس 1 (اوپر کی حد) کے برابر ہے۔ ڈیٹا کی قسم کے ساتھ کام کرنا خود آسان ہے۔ ہم اس مضمون کے لیے آن لائن جاوا کمپائلر "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);
  }
}
I/O اسٹریمز کے ساتھ کام کرتے وقت بائٹس کے ساتھ کام کرنا فعال طور پر استعمال ہوتا ہے۔ آپ اوریکل کے ٹیوٹوریل میں مزید پڑھ سکتے ہیں: " I/O اسٹریمز "۔ اس کے علاوہ، جاوا میں آپ قدر کو بٹس کے طور پر بتانے کے لیے ایک خاص لٹریل استعمال کر سکتے ہیں:
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
bitwise negation NOT (Unary bitwise)، جس کی نمائندگی tilde سے ہوتی ہے، بٹس کو الٹ دیتی ہے۔ اسے ٹیلڈ کے طور پر لکھا جاتا ہے، مثال کے طور پر ~5۔
public static void main(String[] args) {
	System.out.println(~5); //-6
 	System.out.println(~-5);//4
}
یہ ایک بار پھر ظاہر کرتا ہے کہ جب جاوا کسی نمبر کے نشان کو تبدیل کرتا ہے، بٹ ویلیوز کو بالکل آخر میں الٹانے کے علاوہ، ہم +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");
    }
  }
مزید تفصیلات کے لیے " جاوا میں بٹ وائز آپریٹرز کے ساتھ ماسکنگ کے اختیارات " دیکھیں۔ بٹ ہیرا پھیری ایک دلچسپ موضوع ہے جس پر الگ الگ جائزے، مضامین اور کتابیں لکھی گئی ہیں۔ اور یہاں سے خفیہ نگاری کا طویل راستہ شروع ہوتا ہے۔ اس جائزے کے حصے کے طور پر، یہ سمجھنے کے قابل ہے کہ یہ کیوں کام کرتا ہے اور کیسے۔ بٹ آپریشنز کے بارے میں مزید معلومات کے لیے، میں tproger کا جائزہ پڑھنے کی تجویز کرتا ہوں: " بٹ آپریشنز کے بارے میں ۔"

قدیم اقسام

تو، ایک بائٹ ایک آکٹیٹ ہے، یعنی 8 بٹس۔ یہ یاد رکھنا آسان ہے کہ جاوا میں بھی 8 قدیم قسمیں ہیں، اتفاق سے۔ ایک قدیم قسم ایک ڈیٹا کی قسم ہے جو ایک پروگرامنگ زبان میں بنائی گئی ہے، یعنی ڈیفالٹ کے ذریعے دستیاب ہے۔ بائٹ میموری فوٹ پرنٹ کے لحاظ سے سب سے چھوٹی قدیم ڈیٹا قسم ہے جس کے ساتھ جاوا کام کر سکتا ہے۔ جیسا کہ ہم نے پہلے کہا، ایک بائٹ 8 بٹس لیتا ہے۔ اس لیے، سب سے اہم ہندسہ نمبر 7 ہے۔ اس لیے، بائٹ میں -2 سے لے کر 7ویں پاور سے 2 سے 7ویں پاور مائنس 1 تک کی قدریں شامل ہیں۔ دوسری کون سی قدیم قسمیں ہیں:
جاوا: بٹس اور بائٹس - 17
جیسا کہ ہم ٹیبل سے دیکھ سکتے ہیں، ڈیٹا کی قسمیں ڈیٹا کی مقدار کے لحاظ سے دگنی ہوجاتی ہیں۔ یعنی مختصر = 2 * بائٹ، اور int = 2 * مختصر۔ یہ حقیقت میں یاد رکھنا آسان ہے۔ یاد رکھیں کہ بائٹ = 8 بٹس۔ حقیقت یہ ہے کہ یہ کم نہیں ہوسکتا ہے بھی یاد ہے. انگلش میں انٹیجر کو انٹیجر کہتے ہیں۔ اس سے ابتدائی قسم کو مخفف int کہا جاتا تھا۔ ایک باقاعدہ عدد ہے - int۔ ایک مختصر ورژن، مختصر، اور ایک طویل ورژن، طویل ہے. اس کے مطابق، int 32 بٹس (4 بائٹس) پر قبضہ کرتا ہے۔ مختصر ورژن 2 گنا چھوٹا ہے - 16 بٹس (2 بائٹس)، اور لمبا ورژن دو گنا بڑا ہے، یعنی 64 بٹس (8 بائٹس)۔ لہذا ایک int زیادہ سے زیادہ 2 بلین اور ایک سو ملین کی تعداد کو ذخیرہ کرسکتا ہے۔ اور لانگ زیادہ سے زیادہ تقریباً 9 quadrillion (ایک اچھا لفظ) ذخیرہ کر سکتا ہے۔ پرانے لطیفے کو یاد کرتے ہوئے کہ کس طرح ایک نیا پروگرامر سوچتا ہے کہ ایک کلو بائٹ میں 1000 بائٹس ہیں، اور ایک مکمل پروگرامر کا خیال ہے کہ ایک کلوگرام میں 1024 گرام ہوتے ہیں، ہم سمجھ سکتے ہیں:
1 mb = 1024 Kbyte = 1024 * 1024 = 1048576 bytes
1 int = 4 bytes
1 mb = 262144 int
ویسے، کسی دھیان سے پڑھنے والے نے دیکھا ہو گا کہ تصویر میں صرف 7 قسمیں ہیں۔ 8 قدیم قسم بولین ہے۔ boolean ایک بولین ڈیٹا کی قسم ہے جس کی صرف دو قدریں ہیں: درست اور غلط۔ لیکن سوال پیدا ہوتا ہے - یہ کیا سائز ہے؟ جاوا ورچوئل مشین کی وضاحت اور سیکشن " 2.3.4. بولین ٹائپ " ہمیں جواب دے گا:
جاوا: بٹس اور بائٹس - 18
یعنی، صرف ایک بولین ایک int کے طور پر ایک ہی رقم لے گا. اگر ہم بولین کی ایک صف کا اعلان کرتے ہیں، تو صف کا ہر عنصر 1 بائٹ پر قبضہ کرے گا۔ یہ ایسے معجزے ہیں :)

نتیجہ

میرا مشورہ ہے کہ آپ اپنے آپ کو مضبوط کرنے کے لیے کچھ مزید مواد سے واقف ہوں: #ویاچسلاو
تبصرے
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION