 اسلام علیکم سیس ٹوزی رو اوان انٹردکٹشنٹو پروگریمنگ آج ہمارا ایک کیسما لیکچر ہے ابھی تک ہم نے بہت سارے پروگریمنگ کنسٹرکٹس اور سی اور سی پلاس پلاس لنگوچ کے فیچس وگیرہ کور کیے ہیں اور ساتھ ساتھ ہم پروگریمنگ بھی سیکتے گئے ہیں آج ایک چھوٹا سو طوپک بڑا انٹرسٹنگ طوپک ہم کور کرتے ہیں اور وہ ہے بٹ مینیپلیشن کا اور بٹ اوپریٹرز کا اور بٹ دیتا ٹائپس جن کے ساتھ ہم نے کام کیا ہے انٹیجرز، چار، یعنی کارکٹر پھر فلوٹ، دبل یہ نیٹف دیتا ٹائپس تھی پھر ان کی ڈیرےز وگیرہ ہندل کی یہ سب جو ہیں یہ بائٹ لیوہ یا ملٹپل بائٹس والے ڈیتا ٹائپس ہیں what about bits آپ کو پتا ہے کہ کومپیوٹر کے اندر تو ہر چیز بنز اور زیروز کے اندر رپزنٹ ہو رہی ہے ابھی تاک اگر ہم انٹیجر لیتے تو وہ ایک وقت میں منیپلیٹ ہو رہی ہوتی ہیں اگر ہم 4 plus 2 تو 4 plus 2 کا سام 6 وہ سارا 4 4 بائٹس کے اندر سٹور کر کے منیپلیٹ ہو رہا ہوتا ہے what happens if we want to manipulate them bits at a time یعنی ہم بائٹ کے بھی اندر گھوز کے bits کی بات کرنا چاہیں یہ ہے آج کے لیکچر کا topic آپ کو یاد ہو گا کہ جی ایک بائٹ کے اندر 8 bits ہوتی ہیں آج ہم بات کرنا چاہتے ہیں کہ ان 8 bits میں سے ان کو on کیسے کرتے ہیں یا off کیسے کرتے ہیں یعنی کہ 1 کیسے بناتے ہیں زیرو کیسے بناتے ہیں اور اس کام کے لیے ہمارے پاس کیا اوپریٹرس ہیں کچھ ہم اس چیز کے اوپر بھی گوار کریں گے کہ جی یہ سارے کام کرنے کی کیوں ضرورت پیش آتی ہے چلنے یہاں سے ہی شروع کر لیتے ہیں بیسک آئیڈیا جو ہے وہ تو ہے کہ جی اگر ہم bit manipulation کریں تو ایک بائٹ کے اندر 8 مختلف ویلیوز جو ہیں ان کے اندر ہم حصاب کتاب کر سکتے ہیں which means it's a very efficient use of memory do we need this efficiency well sometimes yes sometimes no obviously there are no clear answers کہ جی ہر جگے پہ bit manipulation ہم کر رہے ہوں یا یہ بھی نہیں ہے کہ جی ہر جگے پہ ہم int استعمال کر رہے ہوں operating systems اور ان کے فائلوں کے attributes وگرہا اس کے اندر bit fields بہت زیادہ کام آتی ہیں ہم جو manipulation کر رہے ہیں وہ آپ سمجھیں گے کہ جی operating system level پر اگر ہم کام کرنا چاہیں تو یہ manipulation وہاں پہ useful رہتی ہیں let's look at a few of the operators that we are going to be working with ابھی تک آپ کو یاد ہوگا ہم نے logical tests کے لیے کچھ operators introduce کیا تھے and or or operators and کے لیے ہم نے double ampersand sign استعمال کیا تھا or کے لیے double vertical bar pipe symbol جس کو میں کہتا ہوتا ہوں یہ pipe کا word unix operating system سے آتا ہے لیکن پھر dose وگرہ میں بھی available ہے تو وہ symbol ہم استعمال کرتے تھے آج ہم logical connectors یا نہیں or or if statement or while loops کے اندر ہم استعمال کرتے تھے for tests ان کی بات نہیں کر رہے آج ہم کر رہے ہیں bit operators کی بات تو یہاں پہ جب میں and یا or کی بات کروں گا وہ and جو ہے وہ single ampersand کے ساتھ represent ہوتا ہے or جو ہے وہ single pipe کے ساتھ represent ہوتا ہے these are essentially boolean operators جن کے ساتھ numbers کے combine کیا جا سکتا ہے now the rules of combination وہ آپ کو شاید cs 101 introduction to computing سے یاد ہو یہی وہاں پہ کبر کیا گئے تھے اور وہی ہم bit manipulation کیلی استعمال کرتے ہیں operators کن سے ہیں and or یہ تو میں آپ کو بتا دیا یہ آپ کنفیوز نہیں کرنا these are not the logical operators جو کے if statement والے تھے یہ bit operators ہیں so they are single ampersand and single pipe symbol اس کے علاوہ we have an exclusive war اس کے لیے کرت استعمال کیا جاتا ہے جو اوپر کو hat بنا ہوئے اور پھر ہمارے پاس not operator ہے invert کرنے کے لیے اس کے لیے جو tilde sign ہے وہ ابھی آپ کے کیبوٹ پر top left پر آپ کو نظر آئے گا so that tilde استعمال ہوتا ہے not operator کیلیے اور پھر اس کے ساتھ باقی ساری ان کی combinations ہیں اس کے علاوہ ہم bits shift بھی کرتے ہیں left or right so bit shifting کیلیے بھی ہمارے پاس operators ہیں اور ان کا بھی مطلب سمجھنا پڑے گا کہ یہ shifting کا کیا مطلب ہوتا ہے اور اس کا arithmetic یا mathematical effect کیا ہوتا ہے let us start with the end operator end کا وہی definition ہے cs101 والی کہ اگر دو bits one ہوں تو one and one کا result one ہوگا اگر دونوں bits میں سے کوئی بھی zero ہے یا دونوں zero ہیں تو result zero آئے گا so and means both bits have to be one for the result to be one then one and zero is zero zero and one is zero and zero and zero is zero so اس کا truth table آپ دیکھ رہے ہوگے it is very simple اس کی صرف output میں ایک لین پے one آتا ہے جہاں پہ دونوں input bits وہ one ہو تھوڑا سا ہم in a way آگے چلے گئے but I would just like to reiterate کہ جب ہم کوئی memory میں کوئی بھی integer یا number store کرتے ہیں وہ actually تو bit pattern ہی store کیا جارہ ہے so you can think جانتے ہیں کہ ہم bit wise دو نمبر کو end کر سکتے ہیں to see how this is done let us take a look at an example example ہم لیتے ہیں دو نمبر کا ہم سمجھتے ہیں کہ جی ایک نمبر وہ 12 ہے اس کی binary representation آپ کر سکتے ہیں let's see if you can calculate mentally کہ جی 12 کی binary representation کیا ہوگی یاد رہے کہ جیو bits وہ right سے اگر شروع کریں تو right most bit the power 0 کو represent کر رہی ہے next جو ہے یہ بالکل وہی positional notation ہے ہم decimal number سسٹم کی اندر بھی استعمال کرتے ہیں except base 2 ہے next bit وہ 2 to the power 1 کو represent کر رہی ہے third you have a 2 to the power 2 کو fourth you have a 2 to the power 3 and so on اب اگر 12 کو represent کرنا ہے تو in a way اگر powers of 2 میں دیکھیں it is 8 plus 4 plus 0 plus 0 so 2 to the power 3 which is 8 وہ والی bit 1 ہو جائے گی 2 to the power 2 which is 4 وہ والی bit 1 ہوگی 2 to the power 1 or 2 to the power 0 والی bits 0 0 ہوں گی so simple working 12 کی binary representation is 1 1 0 0 اب اگر اس کے ساتھ ایک اور number ہم لیتے ہیں وہ لیلیں 8 تو 8 کی binary representation is 1 0 0 0 again 2 to the power 3 والی bit 1 ہے اور باکی اس کے right والی bits 0 ہیں obviously اس سے اگر اوپر کو جائیں گے تو وہ ساری bits بیسے ہی 0 ہیں یہ 2 number لیلیں 12 or 8 اور ان کو end کریں this is the bit wise end that we are talking about so if you look at the arithmetic is very simple اوپر ہم نے 1 1 0 0 لکھتیہا نیچے 0 and 0 انسر is 0 0 and 0 انسر is 0 1 and 0 انسر is still 0 1 and 1 the answer is 1 so when we end 12 and 8 together the binary انسر is 1 0 0 because it becomes fairly confusing problem یہ ہے کہalf کہتے ہیں 12 & 8 is 8 you have to look at it from a bit perspective تھیکہ it is more of a pattern matching issue کی د fazla number چونگ having that کسی ایک نمبر میں زیرو ہے یا دونوں میں زیرو بیٹ ہے تو آنسر میں وہاں پہ زیرو آئے گا سو it is a pattern issue یہ خیال رکھیئے گا all you need to be let's say dexterous with یا آپ کو جس چیز کے اوپر سلاحیت ہونی چاہئے کہ وہ کسی انٹیجر کی bindere representation کو یا آپ دماغ میں کالکلیٹ کر سکیں یا جلدی سے کاغرس پر لکھ سکیں it is not difficult the way to do it of course is a decomposition into powers of two اور ان کو جمع کر کے you can just start writing out the bits ہمارے ایک سامپل میں ہم نے 12 اور 8 لیے تھے چھوٹے سے نمبر ہیں سو ایک آت بیٹ جو تھی وہاں تھی لیکن بڑے نمبر بھی ہو سکتے ہیں anyway let's make sure that we understand کہ یہ جو ہے یہ bit operation ہے یہ logical and نہیں ہے جو logical and ہم نے استعمال کیا تھا جیسے if a is greater than one and b is less than two اس end کے لیے ہم double ampersand sign استعمال کرتے تھے اور وہ کیونکہ logical operator تھا اس کا جواب یا true آتا ہے یا false آتا ہے یہاں پے ہم bits کو end کر رہے ہیں یہاں پے answer یا one آئے گا یا zero آئے گا اور دوسی چیز یہ تمام operators میں for example end کے لیے ہم single ampersand استعمال کریں گے اور کے لیے single pipe symbol استعمال کریں گے and the answer is always zero or one not true or false let's take a quick look at a simple example to determine کہ اگر کوئی بھی نمبر دیا ہو اس میں کوئی خاص bit جو ہے وہ one ہے کہ zero ہے obviously اس کو determine کرنے کے لیے let's say کہ جی چوتی bit جو ہے وہ اس کی one ہے کہ zero ہے you have to determine کہ جی اگر fourth bit on ہو تو وہ power of two کیا بنتی ہے so if you think about it the fourth bit is zero one two three it is the two to the power three والی bit یعنی کوئی نمبر لیں اس کو two to the power three is eight اس کو eight کے ساتھ bit wise end کر دیں اب eight میں باقی تمام bits zero ہے except the fourth bit اگر وہ result جو ہے نمبر کا of being ended with eight اگر وہ non zero آتا ہے non zero کب آئے گا اگر اس نمبر میں بھی چوتی bit one ہو اور ایٹ میں بھی چوتی bit one ہے تو تب ان کا pattern match کرتے بے resultant میں one bit آ جائے گی that means you'll get a non zero answer نون zero میں اس فاستے کہہ رہوں so we don't have to worry about کہ the answer میں one آیا ہے یا two آیا ہے یا four آیا ہے یا eight آیا ہے notice I'm counting powers of two because کوئی بھی bit on ہوئی تو the answer will be a power of two all we care about is کہ جی اگر non zero answer آیا ہے تو ہمارے test pattern کے ساتھ جو ہمارا unknown number تھا اس میں وہ bits match کرتی ہیں so we can basically create any test pattern and end it with the number to determine کہ وہ والی bits اس کے اندر ایک bit جو ہے وہ on ہے کہ نہیں ہے اس simple example کو دیکھنے and ہم نے کر دیے کسی number کو اور ہم نے یہی والا example لے لیا کہ جی eight کے ساتھ end کر دیے اب دیکھیں ہم تھوڑا سنا horizontal integration کر رہے ہیں اپنی skills کی یہاں پہاں اگر دیکھیں ہم نے لکھا ہے if اور پھر parentheses کے اندر number and zero x eight پہلی چیز کہ zero x eight کیا چیز ہے again I will go back and say کہ جی cs 101 میں بھی بات ہوئی تھی ہیکسر دیسی مل نمبرز کو رپرزنٹ کرنے کے لیے c میں خاص طور پہ ہم zero x لکھ دیتے ہیں پہلے اگر نمبر سے پہلے zero x لکھا ہو تو بعد کی digits جو ہیں وہ ہیکسر دیسی مل digits گینی جاتی ہیں تو اب ہم zero x eight جب لکھتے ہیں this simply means eight in hexadecimal doesn't bother us we could have written eight directly but this is a norm that when we are doing bit manipulations we start writing hexadecimal numbers اب نمبر کو end کیا ہم نے eight کے ساتھ اور جو result آیا ہے میں نے اس کو یہ نہیں لکھا کہ if number and eight greater than zero why not میں نے just لکھا ہے if or parenthesis کے اندر number and zero x eight why does this work the reason it works is as you probably know by now کہ جو if ہے it is looking for a true or false answer now true is considered any non zero value and false is considered a zero value so یہاں پہ جب ہم دو نمبر کو bit wise end کریں گے اگر وہ آنسر جو ہے وہ non zero آیا it's not zero or one it's zero and non zero it will be considered true the if statement کا argument جو ہے وہ true گین کے اس کے آگے execute کر دے گا کہ جی bit number four is set اور اگر نہیں ہے تو you can do whatever you want idea okay that was just a little aside کہ جی horizontal integration کہ جی اب ہم explicitly ہم نے نہیں لکھا greater than zero if کے ساتھ بھی ہم نے کر دیا and so on now let's go on and take a look at the or operator when we look at the or operator the difference between the and and the or is obvious وہ بھی I will refer you back to your previous course this again has a truth table فرق اس میں یہ ہے اگر ایک انپرٹ یا دوسری انپرٹ میں bit one ہے تو پھر آنسر میں one bit آئے گی اگر دونوں انپرٹس کے اندر bit zero ہو تو پھر output پہ بیٹ zero آئے گی so in a way اس کے truth table میں one and one or one is a one one or zero is a one zero or one is a one zero or zero is a zero صرف ایک لائن ہے جس میں output zero آتی ہے اس میں ہم کیا کر سکتے ہیں اس اپرٹر کے ساتھ دیکھیں اگر کسی نمبر میں بھی ہم کسی bit کو one کرنا چاہیں we want کے output کے اندر ایک SPECIFIC bit one ضرور ہو then the way to do it would be to or a number or the older number with this pattern جس pattern کے اندر وہ ہماری desire bit already one ہے result کیا ہوگا اگر original number میں وہ bit one تھی تو وہ one ہی رہے گی لیکن اگر original number میں وہ bit zero تھی تو or ہونے کی وجہ سے وہاں پہ پھر output میں وہ one آجائے گی so we can specifically set a bit to one by oring it with a specific bit pattern جس طرح میں نے end کے بارے میں بات کی یہاں پہ میں or کے بارے میں بھی وہاں آپ کو کرتا چاہلوں کہ جو دبل pipe symbol ہے جو ہم logical connectives میں استمال کرتے تھے if or while statements کے اندر وہ جو ہے اس کا آنسر true یا false آتا ہے یہاں پہ جو ہے single pipe symbol والا or which is a bit operator اس کا آنسر will always be zero or one it is a bit value again let us look at our favorite example for this lecture 12 & 8 ان کو اگر or کریں تو کیا ہوتا ہے 12 کا bit pattern ہے 1100 اور 8 کا bit pattern ہے 10000 ان کو جب ہم or کرتے ہیں تو جہاں پہ دونوں لائنوں میں zero ہے وہاں تو output میں zero آئے گا اور اگر کسی بھی ایک number میں one bit set ہے تو آنسر میں one bit set ہوگی لہذا آپ دیکھ رہے ہیں کہ جی the answer is 1100 in this case 12 or 8 is the same as 12 again what I would reiterate is اس کو آپ مثمتکلی یا ارثمتکلی نہ دیکھے گا اس کو pattern matching perspective سے آپ نے دیکھنا ہے کہ جی کسی bit one ہو گئی ہے ایک اپنے لیے trivial example اگر آپ لے لیں کہ جی 8 or 1 کیا بنے گا سوچیں 8 کا bit pattern ہے 100 4 bits میں اگر آپ مانپلیٹ کر رہے ہیں اور 1 کا bit pattern ہے 001 ان کو or کریں تو 8 کی most significant bit وہ بھی one آجائے گی آنسر میں درمیان میں 2 zeros ہوں گے اور least significant bit وہ one میں سے one نیچے آجائے گا سو the answer will be 1001 which is 9 so 8 or 1 is 9 12 or 8 is 12 so answer is don't think about it mathematically please think about it as patterns bit patterns reiterating again please do not confuse the bit and and or operators with the logical and and or operators and your operator bit manipulation کا اس کو ہم استعمال کرتے ہیں to check کہ کوئی number کی اندر کوئی bit ہے وہ on ہے کی نہیں ہے اور or operator عام طور پہ استعمال کیا جاتا ہے number کی اندر bit کو one کرنے کے لیے so you want to set a bit you use the or operator let's go on and look at the remaining 2 what about the exclusive or operation referring back again to your introduction to computing exclusive or کی اندر یہ ہے کہ جی اگر input میں 1 or 1 zero آئے تب output کی اندر one آئے گا اگر دونوں zero ہوں ان پٹ پے یا دونوں ان پٹ پے تو output میں zero آئے گا so if you look at the truth table it looks something like this one exclusive or one will result in a zero one exclusive or zero will result in a one zero exclusive or with a one will result in a one and a zero exclusive or with a zero will result in a zero so this is a complicated operator لیکن اس کے اندر بہت زیادہ power ہے آپ نے لیے آپ تھوڑا سے experiment کرکے دیکھیں let us take اپنا وہی لے لیے 8 or 1 والا example simple ہے ہم زبانی طور پر بھی کر سکتے ہیں 8 or 1 کو exclusive or کریں دیکھیں کیا آتا ہے so we have one zero zero zero zero zero zero one into exclusive or کرنے لگیں اور exclusive or کریں ہم نے کہا ہے جہاں پہ بھی zero or one آئے یا one or zero آئے وہاں پہ آپ کا output میں one bit ملے گی so in this case کے اندر what you get is least significant bit is a zero exclusive or one answer میں one آگیا next you have a zero exclusive or zero answer is zero پھر zero exclusive or zero answer is zero and one exclusive or zero answer is one so the answer in this exclusive or example 8 exclusive or one is one zero zero one which is nine same as or but is there a difference let's see what happens اگر ہم اس کے ساتھ پھر one کو exclusive or کریں ہم آپ پس پیٹن آئے nine کا which is one zero zero one اس کے ساتھ پھر آپ کیا بنیں گا پھر آگیا سیمپل آنف آخری والی بٹ پھر باپس ہو جائے گی اٹھ will become ایٹ again now this is ابھی میں صرف ہنٹ دے کے پھر آگے چلتا ہوں پھر آگیا ہاں ہم کے دیکھیں گے کے دی 8 exclusive or one سے nine بن گیا پھر nine کے ساتھ exclusive or one کیا تو باپس 8 بن گیا we will see how we use this in a little while what about the not operator not operator جو ہے وہ unary ہے یعنی single argument لیتا ہے کوئی number لیں اس کے آگے ہم تلدہ لگا دیں تو اس کی bits کو invert کر دیتا ہے just جو bit one وہ zero ہو جائے گی جو bit zero تھی وہ one بن جائے گی تو again from an arithmetic perspective it is difficult to predict what happens although you can mathematically do that but simple way of looking at it is to look at a bit inversion so again think patterns bit patterns تو اگر آپ کے پاس 8 ہے one zero zero zero اور اس کو ہم invert کرتے ہیں تو تلدہ آگے لگا آگے ہم کہتے ہیں جی اب کیا بنا تو پہلے والے one کا zero ہو جائے گا اور باکی 3 zero's کا one بن جائے گا تو آپ کا pattern ہو جائے گا zero one one one which is four plus to six plus one seven answer is seven so interesting manipulation of bits ہم ان کو استمال کہاں کر سکتے ہیں دو تین examples خیال میں آتے ہیں ایک تو operating systems کی دنیا سے ہے دیکھیں آپ زیادہ تا تو windows استمال کر رہے ہوں گے windows میں بھی you can look at the properties of a file اگر آپ کوئی بھی آپ نے folder structure میں سے file کھولے اس کے پر mouse کا right button کلک کریں تو آپ کو ایک option ملے گی properties normally اخیر پے ہوتی ہے آپ وہ properties دیکھیں file کی ایک windows ہی کھول جائے گی اس کے اندر file کا نام اس کا size کب بنائی گئی کب modify ہوئی so date created date modified نیچے دیکھیں گے تو کچھ check marks لگے ہوئے ہیں read only والا ایک دبہ بنا ہوئے شہد اس میں check mark ہو شہد نہ ہو system کبھی ایک دبہ بنا ہوئے and so on now whenever you think of a check mark you realize you're looking at a bit because یا وہاں پہ check لگا ہوئے which means one یا وہاں check لگا ہوا which means a zero so we are looking at bit flags which are depicting کچھی file کا status کیا ہے so if file کو read only کرنا ہے تو کہیں پہ operating system میں ایک bit کو on کر دیا گیا ہے so file read only ہو گئی اگر آپ یہی example linux یا unix operating system میں دیکھیں تو اگر ہم direct re-listing لیتے ہیں file کی تو اس کے اندر اگر آپ میں سے کسی نے دیکھا ہے ایک something like رو x اس طرح لکھا ہوتا ہے file کی نام سے پہلے پہجوکے پہ لکھا ہو گا r-x and so on یہ بھی bits ہیں میں آپ کو بیسے بتااتا چلتا ہوں just for general knowledge کہ these are bits representing read, right and execute permissions so r for read w for right and x for execute اور اس کے تین sets ہے اونار، اونار گروپ اور اونار گروپتنے لگے لگے تو تین مختلف سیٹس of ڈیوزرز اس فائل کے ساتھ کیا کر سکتے ہیں لیکن وہ بسائل کے جی وہ یونکس میری رپرزنٹیشن ہوتی ہے ایڈیئے ہے فائل کے ساتھ کچھ اٹریبوٹس جو ہے نا وہ اپریٹنگ سسٹم رکھ رہا ہے اور یہ اپریٹنگ سسٹم کی اٹریبوٹس are best kept as bit fields لیکن جو ہم بٹ مینوپلیشنز کے لگے ہم دیتے ہیں لیکن یہاں سکتے ہیں کہ اگر اگر میں اس فائل کو ریڈ اونلی کرنے تو کیا کروں گا اپنی کھجھا سکتا ہوں کہ میں ریڈ اونلی بٹ ہے اگر مجھے اون کیا ہو تو میں کھہاں بھی یہ فائل کو میکنے کیا کریں آپ پہلے دوچھا سکتا ہے لیکن آپ لیکن آپ میکنے میکنے کیا کرتا ہے لیکن ہم جو اپرٹرے تک پہلے کامتے والے کیا کرنا جاہیں ایک چیز جو شہد آپ کو آپ کے سیسٹنس پر بھی آپ کو کرنی پڑے اس پیچھلی فیوزیں بینڈوز 2000 اس کے جب آپ کمپیوٹر سٹارٹ کرتے ہیں تو ایک سکرین آجاتا ہے کہ کنٹرول ڈلیٹ ڈبائیں اور پھر اس پر لاغن کریں تو لاغن میں آپ اپنہ ڈالتے ہیں اور پاسورٹ ڈالتے ہیں یا فر that matter آپ ہمارے ورچول ڈینیورسٹی کے لرنیگ مینجمنٹ سسٹم پر جب لاغن کرتے ہیں تو آپ کبھی کیا ثانی ہوگا نکلی یا ڈوٹس آرے ہوتیں یہ ڈارز آرے ہوتے ہیں تا ایڈیہ یہ ہے کہ جیا آپ کیا اگر شوڑر کے پیچھے کوئی اور صاحب کھڑے آپ کو دیکھ رہے ہیں یا سکرین کو دیکھ رہہے ہیں تو آپ کا پاسورٹ نہ پر لیں اس ماں کسسرہ اس پاسورٹ کیا خاص انہوں؟ یہ کہیں نا کہیں کوئی ڈیٹا بیس ہوگا جس کے اندر یہ پاسورٹ ڈیٹ کیا ہوا گا اور پھر آپ لاغن کرنی کی کوشش کرتے ہیں کہتے جی اس جوزر کا پاسورڈ اس دیتا بیس میں دیکھو وہاں سے پاسورڈ لیا جو آپ نے انٹری کی ان کو مچ کیا if they both match then you are allowed to access the system there is a subtle problem here problem یہ ہے جی جی اگر وہ پاسورڈ ویسے ہی سیسٹم کے اندر سٹور کر دیا جائے انہیں سیسٹم دیتا بیس کے اندر تمام جوزر کے پاسورڈ پڑے ہوئیں تو جو سیسٹم اڑمینیسٹریٹر ہے for example وہ کسی کا پاسورڈ بھی پڑھ سکتا ہے and he or she can give that pass word to somebody else and that account could be misused how would you find out as the user کہ جی آپ کا account you have a misuse ہو رہا ہے you would login آپ کا پاسورڈ ویلیڈ ہے آپ کام کر سکتے ہیں لیکن آپ نے جب کام ختم کر لیے کوئی اور آپ کے پاسورڈ سے login کر کے بھی کام کرتا رہے آپ کو پتا نہیں چلے گا to prevent this most modern operating systems normally keep the pass word in an encrypted fashion اس کو کوڑ کر دیتے ہیں تالے لگا دیا کہ جی even the system administrator اس کو پڑنا سکے اگر وہ نہیں پر سکتا لیکن system administrator is system administrator جس کو ہم کہتے ہیں super user he owns the system وہ ساورڈ پر بیٹھ کے آپ کا پاسورڈ دیلیٹ سرور کر سکتا ہے آپ کا پاسورڈ چینج سرور کر سکتا ہے but there is no way for the system administrator to normally find out what your pass word was now how does this change the equation لیکن ابھی میں نے کہا کہ اگر آپ کا پاسورڈ چوری ہو جاتا ہے اور وہ کسی اور کو پتا چل جائے تو you can both be using the system at different times and you will never find out that your account is being misused on the other hand if your password cannot be stolen because it is encrypted تو اس کو this admin نے چینج دو کر دیا لیکن چینج کیا تو آپ لگن نہیں ہو سکیں گے کیونکہ آپ کو تو نہیں پتا کہ چینج کر کے نیا پاسورڈ کیا رکھا گیا ہے اگر آپ لگن نہیں ہو سکتے تو آپ کو ایک مجھٹلی پتا چاہے گا کہ جی سسٹم کے ساتھ کوئی گربر ہے and you can pick up the phone or call somebody and say کہ جی میرا پاسورڈ ریسیٹ کر دو so it's easy to detect the question is how easy or difficult is it to decrypt that password دو طریقے ہیں پاسورڈ ویریفیکیشن کے ایک طریقہ تو یہ ہے کہ پہلے تو آپ سمجھنے ناگا آپ کا پاسورڈ جو ہم نے کسی مشین سے گزارا اس کی انکریپشن کر دی اور انکریپٹ کر کے ایک دیفرنٹ بیٹ پیٹرن جو ہے وہ آپ کے دسک پر اکتیا دیتا بیس کے اندر اکتیا اب جب آپ لوگن کرنا چاہتے ہیں ایک طریقہ یہ ہے کہ جی آپ جا پاسورڈ کی انٹری کریں تو دیتا بیس سے وہ پاسورڈ اٹھایا جائے اس کو ڈیکوڑ کیا جائے کہ جی اس کا originال کیا تھا اور جو آپ نے طریقہ کیا اس کو اس کے ساتھ کمپیر کیا جائے but that is not the way we do things and there are two reasons for that what we do is کہ جو آپ نے اس دفعہ انٹری کیا ہے اس کو بھی ہم انکریپٹ کرتے ہیں اور اسی تریقے سے اسی طریقے سے اسی مشین کے طرح ہم انکریپٹ کریں گے جسے ہم نے پہلے کیا تھا اور دونوں انکریپٹیڈ version' کو ہم کمپیر کرتے ہیں اور اگر انٹری پاسورڈ کیا ہے انٹری پاسورڈ کیا ہے تو پھر وہی سوپریوزر یا سسٹم адمینیسٹریٹر وہ بھی اس کو دیکھ سکتا ہے کہ جی پاسورڈ کیا ہے وہ ڈیکریپٹ کی کمان چلا اس کو دیکھ لے تو یہ سوپریوزر کی حاصل ہے دوسرا حاصل ہے کہ آپ کا پاسورڈ جو بھی طار پر ٹریوڈ کرے گا کہی نہ کہی تو جائے گا کمپیر ہونے کے لیے پیداکر سے پیداکر ہے پاسورڈ پیداکر پر ٹریوڈ کیا ہے پاسورڈ پر ٹریوڈ کیا ہے لہذا ہم دیکھ سکتے ہیں ایک انکریپٹنٹ کیا ہے کمپیر کرتے ہیں انٹری پاسورڈ کیا ہے تیسری چیز جو ہم اس کے اندر پاسورڈ میکنیزمیں نواملی استعمال کی جاتی ہے وہ یہ ہے کہ جی اوکے دیکھریپٹنٹ کا ہم نے بتایا تو نہیں ہے لیکن کوئی طریقہ تو ہوگا اس کو دیکھریپٹ کرنے کا طریقے ضرور ہوتے ہیں اندیار مثمیٹیکلی نیچہ لیکن انکریپٹنٹ ٹیکنولوجی میں تپکلی جو اپروچ اختیار کی جاتی ہے وہ یہ ہے کہ جی انکریپٹ کرنا اسان ہے ان اسان کو آپ رید کرنے کہ جی بڑی جلدی سے ہو جاتے مبھی ایک لیکن اگر آپ اس کو کرک کرنا چاہیں اس کو آپ کہیں کہ جی اس کو کوئی الگرید میں کلی کوئی program لکھے اس کو توڑو تاکہ پتہ چلے کے پاسورڈ کیا ہے تو آپ کو شہد کئی سال چاہیں کمپیوٹر ٹائم کے دیکھریپٹا پاسورڈ ایسی طریقہ دیکھریپٹ ہاڑ دیکھریپٹ جو پاسورڈ آثینٹکیشن آپ نے پاسورڈ دالے اس کو انکریپٹ کر کے ہم اس کے انکریپٹیڈ وورجن کے ساتھ کمپیر کرتے یہ ساری کہانی میں نے آپ کو کیوں بتائی ابھی ہم نے ایکسلوسیف اور بیٹوائیز عبریشن اس کے بارے میں بات کی تھی اور اس وقت میں نے آپ کو بتایا تھا کہ دیکھیں ایٹ اور ون کا ایکسلوسیف اور نائن آیا ہے اور نائن اور ون کا ایکسلوسیف اور پھر ایٹ آگیا ایک بیٹ کیو ہے نا سوچ ہو رہی ہے اپنے طور پہ آپ کوئی انٹیجر لے لیں ایک اپنا بیٹ پیٹن لکھ لیں کہ اس کی بیٹ رپریڈینٹیشن کیا اٹ بیٹ کا لکھیں سولہ بیٹ کا لکھیں doesn't matter کوئی ایک اور نمبر لے لیں بیٹ اور اس کا بیٹ پیٹن لکھ لیں ان دونوں کو ایکسلوسیف اور کریں آپ ایک کچھ آئے ایکسلوسیف اور بیٹ ایکسلوسیف اور بیٹ ایکسلوسیف اور بیٹ سی کو بیٹ کے ساتھ ایکسلوسیف اور کریں ان دیکھیں کیا ہوتا ہے ایکسلوسیف اور بیٹ اور پرانثیسیف لگا کے پھر ایکسلوسیف اور بیٹ آپ کو کسی ہی حیہ لکھ لے کہ وہ واپس ای میں تبدیل ہو گیا اسی طرح اگر آپ اسی جو آپ کا رزالٹنٹ آیا تھا وہ وپس بی میں تبدیل ہو جاہے گا تو بہت سید ہو جائے گا ایک نمبر ہی بھی بہت ملک کیا ہے اور لیے روز میکنیزم کو بہترین نامبر پہلے وہ اخشکلیسور کے اندر یہ کام آ جاتا ہے فرق کیا ہے کہ سپوز کریں کہ جی اب ہم آپ نے ایک ازامپل کی طرف چلتے ہیں کہ ایک جو آپ نے پاسورڈ کیبوڈ سے ٹائیک کیا بی ایک نمبر ہے جو میں نے سی کرٹ ٹھاکھا ہوا ہے تو میں آپ کے پاسورڈ کو اٹھا کے بی کے ساتھ ایکسلوسف اور کرتا ہوں اور جو بھی رزلٹ آتا ہے اس کو سٹور کر دیتا ہوں Can any other user decrypt this number and try to find out کہ آپ نے پاسورڈ کیا ڈالا تھا You know, answer is non-trivial It is a lot of combinations of numbers that will result in the same thing So you really cannot know On the other hand کیوں کہ مجھے پتا ہے کہ بی کی value کیا تھی میں نے اگر کمپیر کرنے میں صرف بی کے ساتھ پھر ایکسلوسف اور کروں گا میرے پاس original value واپس آجائے گی So do that experiment and prove to yourself that an exclusive war works both ways اسی کا ایکسلوسف اور کم میں آپ کو ایک اور ایک سامپل دیتا ہوں which is also very interesting Disks کے اندر جو ہماری computer کی Disks ہیں مسئلہ کیا آتا ہے کہ جی چلتے چلتے کبھی bad sector آجاتا ہے یا Disks چلنا بند ہو جاتی ہے اس وقت ہم نوملی کیا کرتے ہیں اپنے بال کھنچتے ہیں because کئی سالوں کا کئی مہینوں کا کام ہمارا Disks پر پڑاوا تھا آج وہ چل نہیں دائی تو جو ہمارے بڑے والے سسٹم سے the more complicated more sophisticated systems like our servers for example ہم requirement ہماری یہ ہوتی ہے کہ یہ 24 گھنٹے چلتے رہیں 365 days a year چلتے رہیں تو اس کے اندر we cannot take the risk کہ اگر ایک Disks مر گئی تو جیسٹم ہی بیٹ جائے تو ہماری ہماری یہ میکنیزم جس کو RAID کہا جاتا ہے Redundant Array of Inexpensive Devices RAID RAID کے اندر ہم ایک Disks نہیں لگاتے ہم کئی Disks لگاتے ہیں RAID کے کئی level ہیں I won't go into that but میں آپ کو ایک SPECIFIC ڈیجامبل دیتا ہوں ہم suppose کریں کہ ہم ایک بائٹ لکنا چاہتے ہیں RAID ڈکنیک کے اندر although there are many levels suppose ہم نے 9 Disks لگا لی ہیں اوپنیچے میں کہتا ہوں ایک بائٹ جس میں 8 bits ہوتی ہیں وہ Disks پر لکھو تو اس کے لکھنے کا طریقہ ہم یہ اختیار کرتے ہیں کہ پہلی بٹ پہلی Disks پر لکھ دی دوسری بٹ دوسری Disks پر لکھی تیسری تیسری پر and so on پہلی 8 Disks کے اوپر ہم نے ایک بائٹ 1 bit at a time لکھ دی نوی Disks کے اوپر what if we were to take the exclusive war of the first 8 bits one at a time means a pair at a time آپ ایک exclusive war کرتے جائے اور انڈ پر جو result آتا ہے اس کو 9th Disks پر لکھتے اب اس کا فائدہ کیا ہوگا suppose چلتے چلتے کوئی ایک Disks وہ بیٹ جاتی ہے stop working all you do is you put in another Disks in its place a new bit Disks جو ٹھیک ہے بالکل لیکن وہ ابھی خالی ہے اس کے اوپر ہم کچھ دیتا لکھنا چاہتے ہیں all we do is کہ جو باقی کی آٹ ہیں اب ہمیں نہیں پتا کونسی والی درمیان والی شہدیک خراب ہوگی ہو باقی آٹ پہ جو بھی bits ہمیں ملتی ہیں ان کو پھر آپس میں exclusive war کریں اور جو بھی جواب بنتا ہے وہ نئی Disks کے اوپر لکھ دیا جائے اس bit position کے اوپر مزے کی بات یہ ہے یہ وہی bit ہوگی جو پہلی خراب Disks پر لکھی ہوئی تھی prove it to yourself آپ نے لیے ایک pattern بنائیں exclusive war کریں اور بیچ میں دالیں and determine for yourself کہ یہی ہی ہی ہی ہوتا ہے کوئی بیٹ مٹا دیں باقیوں کو exclusive war کریں including the 9th نور Disks جو تھی اب ایک بیچ میں سے نکال دیں تو جو بھی 8 bits بچتی ہیں ان کو exclusive war کریں you'll find کہ وہی bit ملے گی جو وہاں سے missing تھی so it's an interesting technique of recovering data without even shutting down your computer اور اس کے اندر جو پھر یہ hardware کی side پی آ جاتے ہیں your technique استعمال کیا جاتی ہے اس کو ہم hot plug کہتے ہیں چلتے ہوئے computer پہ چلتی ہوئی Disks میں سے ایک خراب ہوئی اس پر لالبتی جل گئی وہ Disks چلتے ہوئے computer میں سے نکال لی جاتی ہے اور وہ نئی Disks اس کی جگے پہ دال دی چلتے چلتے عاستہ عاستہ وہ Disks Repair ہو جاتی ہے اس پر سارا دائٹا سسٹم جو ہے واپس لکھ دیتا ہے warning دیتا چلوں اپنے computer کے ساتھ یہ نہ کی جے گا جو ہمارے home PC's ہیں جی چلتی ہوئی خود کیا Disks' کو Unplug جاہے اس کو Off کرکی ہی ہاں اسٹمیل کرتے ہیں this is meant for the major serval what else can we do so we are discovering in a way کہ ExclusiveOR is a very interesting operation ہمیں جو ہمھیں ایک ایک ایک ایک نوی کئی ایک ایک ایک سامل کیا تھے کہ جی دو نمبرت کو آپس میں swap کرنے کیلئے and the usual technique which I said is so common اگر آپ استعمال کرتے رہن گے اگر اپس میں انٹر چینج کرنا ہے تو آپ کو ایک تیسری پوزیشن چاہیئے سپوز آپ کو آن بی اور آپ کو انٹر چینج کرنے کے لئے آپ کو ایک ثرد پوزیشن کی جہاں پہلے سے آی کی ویلیو سی میں لکھ دی بی کی ویلیو آی میں لکھ دی اور پھر سی میں جو سیوک کی ہوئی تھی آی کی ویلیو اس کو لاکے بی میں لکھ دیا تو سوپنگ اس اچیوٹ then we also did an example جہاں پہ ہم نے سوپ بای ریفرنس کیا تھا function کیا تھا but can we do a swap of two numbers without using the third memory location now not that it's really necessary کہ ہم یوں کریں لیکن کئی دفعہ یہ ضرورت پیش آ جاتے سپوز you try it take two numbers unsigned integers a and b آپ یہ کریں a کے ساتھ b کو exclusives اور کر کے a میں لکھ دے پھر b کے ساتھ جو a کی نئی ویلیو ہے اس کو exclusives اور کریں اور b میں لکھ دیں اور پھر a کی جو ویلیو ہے اس کو b کی نئی ویلیو کے ساتھ exclusives اور کر کے a میں لکھ دیں try it for yourself and try it with many numbers you can prove to yourself that it works three exclusives or operations and you would have interchanged a with b and try to understand یہ کیسے ہوگیا جادو without using a third position یہ ساری جو بٹ مینیپلیشنز ہم کرتے رہے ہیں usually ہم unsigned integers کے ساتھ کرتے ہیں signed or unsigned کبھی آپ نے پڑا ہوگا introduction to computing میں typically ہم جو most significant bit ہے اس کو استعمال کرتے ہیں as a sign bit so اگر وہ 0 ہو تو number positive گنا جاتا ہے اور اگر most significant bit 1 ہو تو number negative گنا جاتا ہے so normally all of these operations we will do with unsigned integers اور اس کا بھی syntax ہے کہ جو you write unsigned poor word unsigned int اور پھر آگے ij کے جو بھی لکھنا ہے so then they will be treated as positive numbers only or the most significant bit be 1 ہو یا 0 ہو they will be treated as positive numbers so try some bit operations within your programs write some programs and find out the results are as expected یہ چھوٹے چھوٹے results ہے آپ کاغص پی بھی کالکلیٹ کر سکتے ہیں let's go on next آگے آپ کے پاس one decimal ہو اور میں کہو اس کو left shift کر دو in a way کہ جو جگہ بچی ہے اگر وہاں 0 لکھا جائے تو number بن جاتا ہے 10 mathematically ہم نے کیا کی ہے now 10 marks to those who said کہ جی ہم نے 10 سے multiply کیا ہے and 0 marks to those جنو نے یہ کہا ہے کہ جس میں 9 ہم نے add کیا ہے because actually we multiplying by 10 and if you remember positional notation that's what it is 10 لکھا ہوا ہے تو اس کو left shift کریں اور اخیر والی جگہ پہ 0 لکھنے تو آپ نے پھر 10 سے ملتیپلائے کر دیا تو 10 ملتیپلائے با 10 ہنڈ ہو گیا 1 0 0 same thing applies when we do bit shifts if we were to shift left by one bit now the system is binary so you're actually multiplying by 2 you left shift again you multiply by 2 again same applies in the other direction if you were to shift right then you are dividing by 2 in the binary system if you shift right in the decimal system اور سمجھے مہاں دیوار ہے so جوہا shift right کرتے ہیں تو ایدھر digit غیب ہو جاتا ہے drops of the end so you are dividing by 10 اس کے لیے ہمارے پاس SPECIFIC OPERATORS ہیں now it becomes a little confusing but don't be confused these are bit shift operators why is it confusing سیمبل اس کا وہی ہے جو ہم see in اور see out کے ساتھ استعمال کرتے ہیں یعنی دبل less than جو ہے it's a left shift operator اور دبل greater than جو ہے it is a right shift operator and this is bit shift operators اور اس کے ساتھ ہم نمبر دے سکتے ہیں کہ جی کتنی bits سے shift کرنا ہے so it is convenient to look at it that way take a number اور اس کو آپ کریں left shift by one چھوٹا سا program لکھیں and prove to yourself the answer is original number multiplied by two اسی طریقے سے اس کو right shift کریں by one and prove to yourself that it's the original number divided by two when we are doing this bit shifts and all of these operations remember we will be working with unsigned integers اس کے لیے آپ کو کچھ rules یادرکھنے پڑھتے ہیں ایک میں نے آپ کو بتا دیا کہ جب آپ نمبر کو left shift کرتے ہیں تو اس کی right side پہ جو خالی بچتی ہیں bits وہاں زیروز آنا شروع ہو جاتے ہیں so جیسے نمبر left چلتا گیا اخیر والی خالی بٹس میں زیروز ہوتے گئے same applies to a right shift if you were to do a right shift تو left most bit you have the most significant bit وہاں پہ زیرو آتے جائیں گے farq تھوڑا سا آ جاتا ہے with operating systems if you are using signed numbers I won't go into that complication لیکن دیکھیں سائن نمبر میں میں ابھی تھوڑی در پہلے آپ کو بتا ہے کہ جو most significant bit ہے وہ one ہوتی ہیں اب اگر سائن نمبر کو میں right shift کروں تو کیا ہوگا اگر تو وہ one bit be shift ہو جائے اور وہاں پہ zero لکھا جائے تو suddenly a negative number positive number بن جائے گا normally operating systems your compilers they will treat these differently so you may have to experiment with it what happens if you right shift a negative number nonetheless اس وقت ہم unsigned کی بات کر رہے ہیں ہیں so unsigned کے اندر آپ left right shift کر کے دیکھیں and prove to yourself that these are multiplication by two and division by two so lots of bit manipulations you can do any interesting examples we can cover here well again efficiency کے حوالے سے سوچ لیں کہ جب ہم computer کو کہتے ہیں کہ جی کسی نمبر کو multiply کرو اب وہی problem آ جاتا ہے جو پہلے میں occasionally ذکر کرتا جا ہوں آپ کے ساتھ کہ جی ہمارے computer بہت زیادہ تیز ہو گئیں so it is very difficult to find out کہ جی ایک ہزار multiply کی ہے تو وہ کتنے سیکنز میں ہوگا وہ تو micro seconds میں ہو جاتا ہے لیکن let me tell you a bit shifting is usually more efficient than straight multiplication nonetheless I will qualify it I will not say always it depends on how you manipulate these bits and again the particular operating system you are using a particular compiler you are using how efficiently it encodes it but playing with bits is quite fast you are using a small amount of memory space to store a lot of information دیکھیں ایک byte اگر لے لیں تو 8 مختلف چیزیں جو ہیں اس کے اندر آپ in terms of properties سٹور کر سکتے ہیں فایل جو ہے اگر لے لیں جو ایک سامپل میں دیا تھا کہ جی وہ read only ہے کہ نہیں ہے وہ archived ہے کہ نہیں ہے وہ system file ہے کہ نہیں ہے اگر ہم ordinary numbers استعمال کر رہے ہوتے یا integers کر رہے ہوتے maybe we would have used 3 bytes for that یہاں پہلے بھی use only 3 bits اب اگر دیکھیں جا میں فایل کا ایک سامپل دیتا ہوں یہ فایل ہیں جن کے attributes اس کے اوپر سٹور ہوئے ویں so disk space جو ہے وہ at a premium ہوتی ہے we don't want to waste any space so it is very nice that we can store file attributes as flags as masks on the disk and determine کیو اس کے فایل کے ساتھ کیا کچھ کر سکتے ہیں anyway try out the bit operators اپنے لیے prove to yourself the work ایک دو چھوٹے چھوٹے topic رہ گئے ہیں لیکن for the moment I think we've covered a lot of ground you have a lot of tools that you are equipped with next lecture what we'll do is we'll try to do a brief ایک topic جو رہ گیا ہے اور اس کے ساتھ پھر ہم شروع سے لے کے اب تک کیو کور کیا ہے اس کو ہم review کر لیں گے because I know your mid terms are coming up so work hard study hard and remember concepts کی اوپر زور دینا ہے رٹنی کے اوپر زور نہیں دینا so till next time خدا حافظ