کار با عملگرهای بیتی در جاوااسکریپت

سلام خدمت تمامی دوستان و همراهان محترم سایت آموزشی فری لرن ، امیدوارم که حال همگیتون خوب باشه. لطفا در ادامه با آموزش کار با عملگرهای بیتی در جاوااسکریپت با من همراه باشید.

کار با عملگرهای بیتی در جاوااسکریپت

Free-Learn

کار با عملگرهای بیتی در جاوااسکریپت

عملگرهای بیتی یا به انگلیسی Bitwise Operators ، بطور کلی عملگرهایی هستند که بروی سیستم باینری ( Binary ) یا سیستم دودویی اعداد کار میکنند.

انواع مبنای اعداد :

  • مبنای ۱۰ ( یا ده دهی یا انگلیسی بهش میگن Decimal )
  • مبنای ۲ ( یا دودویی یا انگلیسی بهش میگن Binary ) ( بر اساس ۰ و ۱ کار میکنه )
  • مبنای ۸ ( یا اُکتال یا انگلیسی بهش میگن Octal )
  • مبنای ۱۶ ( یا هگزادسیمال یا انگلیسی بهش میگن Hexadecimal )

اگه با جریان مبناهای اعداد آشنا باشید میدونید که اعداد میتونن در مبناهای مختلف وجود داشته باشند، حال جاوااسکریپت بصورت پیشفرض مبنای اعدادش ۱۰ ( ده دهی یا انگلیسی بهش میگن Decimal ) هست.

یعنی مثلا اگه بگیم ۲ + ۲ خب اون باهم جمع میکنه و نتیجه که میشه ۴ رو در قالب مبنای ۱۰ نشون میده، یعنی ۴ در مبنای ۱۰ میشه ۴ ، ۱۰۰۰ در مبنای ۱۰ میشه ۱۰۰۰ و درکل هرعددی در مبنای ۱۰ همون خودش میشه.

ولی خب مثلا همین عدد ۴ در مبنای ۲ میشه ۱۰۰ ( نکه عدد ۱۰۰ بلکه دوتا صفر و یه یک ) چون گفتیم مبنای ۲ بر پایه ۰ و ۱ کار میکنه ، یعنی مثلا عدد ۵ در مبنای ۲ میشه ۱۰۱ ( یه ۱ و یه ۰ و یه ۱ )

پس دیگه حواستون باشه که در کل عملگرهای بیتی فقط بروی همین ۰ و ۱ ها ( یعنی سیستم دودویی یا باینری ) کار میکنه.

Free-Learn

روش محاسبه یک عدد ده دهی در سیستم دودویی

خب دوستان من فقط بصورت کلی میگم که مثلا چجوری یک عدد در مبنای ۱۰ رو به یک عدد در مبنای ۲ تبدیل کنید ( چون خب این آموزش مربوط به آموزش مبناهای اعداد نیست که بخوام با جزئیات بگم )

به همین دلیل فقط کلی میگم که اگه در جریان مبناهای اعداد ( مثه دودویی ) نباشید حداقل بتونید یه برداشت سریع داشته باشید و بدونید درکل جریان از چه قراره.

ما یه روش کلی داریم که میتونیم اعداد در مبنای ۲ رو به مبنای ۱۰ یا برعکس تبدیل کنیم ، اول میایم یه جدول درست میکنیم بعد تو یه سطرش از عدد ۱ همینجور تا بره بالاتر ( مثلا در عکس های زیر تا ۱۰۲۴ درست شده ولی خب میتونه بیشترم باشه )

یعنی اول ۱ بعدش همین ۱ دوبرابرش میشه ۲ و دوباره دوبرابر ۲ میشه ۴ و همینجور هی ۲ برابر میشه تا غیره ( مثلا ما در تصویر زیر تا ۱۰۲۴ نوشتیم )

بعدش در نهایت هر عددی رو که بخوایم در مبنای ۲ بدست بیاریم کافیه معادل همون عدد در ردیف ده دهی رو در نظر بگیریم و بشماریم و به ازاش یه ۱ بزاریم تو ردیف دودویی ( مثلا عدد ۵ در مبنای ۲ بصورت تصویر زیر میشه )

مثال شماره ۱ : نمایش عدد ۵ در مبنای ۲

کار با عملگرهای بیتی در جاوااسکریپت
نمایش عدد ۵ در مبنای ۲

خب خیلی راحته، شما بگید الان عدد ۱ که در ردیف ( دو دویی ) هست مقابل کدوم خونه های ردیف ( ده دهی ) قرار داره؟ تو خونه ۱ و ۴ ( خب تموم شد رفت ۴ و ۱ باهم جمعشون میشه ۵ )

مثال شماره ۲ : نمایش عدد ۷۵ در مبنای ۲

کار با عملگرهای بیتی در جاوااسکریپت
نمایش عدد ۷۵ در مبنای ۲

Free-Learn

یک بیت چجوری محاسبه میشه؟

بطور کلی خب میدونیم که زبان محاسبه یک سیستم کامپیوتری ۰ و ۱ هست، و همین ۰ و ۱ تا در کنار هم میتونن اعداد رو تشکیل بدن.

مثلا عدد ۱۰ برای خودمون ۱۰ هست ولی برای سیستم چون مبنای محاسبات بر اساس ۰ و ۱ هست ( یعنی همون دودویی یا باینری ) همین عدد ۱۰ میشه ۱۰۱۰ ( ۰ و ۱ و ۰ و ۱ )

حال هریک از این ۰ و ۱ ها یک بیت حساب میشه، مثلا همین عدد ۱۰ ( که میشه ۱۰۱۰ ) یعنی میشه ۴ بیت ، یا مثلا عدد ۱۰۰ ( در مبنای ۲ میشه ۱۱۰۰۱۰۰ ) یعنی ۷ بیت.

Free-Learn

عملگرهای بیتی بروی ۳۲ بیت عملیات انجام میدن

خب این یعنی چی؟! خب مشخصه یعنی جاوااسکریپت فقط تا ۳۲ بیت میتونه بروی عملگرهای بیتی کار کنه و محاسبات انجام بده ، یعنی اگه بخوایم ۳۲ بیت رو نشون بدیم ، پس بصورت زیر داریم :

اینکه همش ۰ هست کاری به این نداشته باشید ، تعداد ارقام رو اگه بشمارید میشه ۳۲ تا ، پس اگه هر یک از ۰ هارو یه بیت حساب کنیم میشه در مجموع ۳۲ بیت.

پس وقتی میگیم عملیات بروی ۳۲ بیت انجام میشود، یعنی دیگه بدونید که جاوااسکریپت همیشه عملیات رو مثه همین صفرهای بالا در ۳۲ بیت انجام میده.

در سیستم دودویی محاسبات از سمت راست به چپ انجام میشه.

مثال شماره ۱ : مثلا میخوایم عدد ۵ رو در مبنای ۲ نشون بدیم ، جاوااسکریپت عدد ۵ رو در مبنای ۲ و ۳۲ بیت بصورت زیر نشون میده : ( تموم شد رفت )

مثال شماره ۲ : نمایش عدد ۴۰۰۰ در مبنای ۲ و ۳۲ بیتی

Free-Learn

جدول عملگرهای بیتی در جاوااسکریپت

در جدول زیر میتونید تمامی عملگرهای بیتی زبان جاوااسکریپت رو مشاهده نمایید.

نام عملگر به انگلیسی توضیح
& AND اگه هر ۲بیت ۱ باشه، ۱ برگشت میده در غیراینصورت ۰ میده
| OR اگه یکی از بیت ها ۱ باشه، ۱ برگشت میده در غیراینصورت ۰ میده
^ XOR اگه هر ۲بیت ۱ یا ۰ باشه، ۰ برگشت میده در غیراینصورت ۱ میده
~ NOT معکوس کردن بیت ها
( یعنی اگه صفر بودن به ۱ تبدیل میشن و اگه ۱ بودن به صفر )
>> Zero Fill Left Shift انتقال بیت ها از سمت راست به سمت چپ
( پُر شدن جای خالی با ۰ )
<< Signed Right Shift انتقال بیت ها از سمت چپ به سمت راست
( دارای بیت علامت )
<<< Zero Fill Right Shift انتقال صفرها از سمت چپ به سمت راست
( پُر شدن جای خالی با ۰ )

Free-Learn

جدول دیداری عملگرهای بیتی در جاوااسکریپت

در ادامه ی آموزش کار با عملگرهای بیتی در جاوااسکریپت میخوایم با جدول دیداری این عملگرها آشنا بشیم، در جدول های زیر میتونید بصورت دیداری ( حالتی که درکش بهتر باشه ) نحوه عملکرد، عملگرهای بیتی رو مشاهده نمایید.

  • عملگر & ( زمانی نتیجه ۱ هست که هم عدد ۱ و هم عدد۲ (دو)  ۱ باشه )
عدد ۱ عدد ۲ نتیجه
۰ ۰ ۰
۰ ۱  ۰
۱ ۰ ۰
۱ ۱ ۱

 

  • عملگر | ( زمانی نتیجه ۱ هست که عدد۱ یا عدد۲ یکیشون ۱ باشه )
عدد ۱ عدد ۲ نتیجه
۰ ۰ ۰
۰ ۱ ۱
۱ ۰ ۱
۱ ۱ ۱

 

  • عملگر ^ ( زمانی نتیجه ۰ هست که عدد۱ یا عدد۲ هردوتاش یا ۰ باشه یا ۱ )
عدد ۱ عدد ۲ نتیجه
۰ ۰ ۰
۰ ۱ ۱
۱ ۰ ۱
۱ ۱ ۰

 

  • عملگر ~ ( اگه ۰ بود به ۱ تبدیلش میکنه و اگه ۱ بود به ۰ )
عدد نتیجه
۰ ۱
۱ ۰

Free-Learn

عملگر بیتی & در جاوااسکریپت

خب دوستان در ادامه ی آموزش کار با عملگرهای بیتی در جاوااسکریپت ، همونطور که کمی بالاتر هم اشاره کردم خروجی این عملگر زمانی بیت ۱ خواهد بود که هر ۲ بیت ۱ باشند، در غیر اینصورت بیت ۰ میشه.

شکل کلی برای استفاده از این عملگر :

  • X = اون عددی که قراره عملیات روش انجام بشه
  • [&] = عملگر بیتی ما
  • Y = اون عددی که قراره عملیات روش انجام بشه

مثال : خب میخوایم عملیات زیر رو ببینیم که با عملگر بیتی & به چه شکل محاسبه میشه

  • چیزی که خودمون در ظاهر میبینیم و به سیستم دادیم

 

  • چیزی که سیستم پشت پرده حساب میکنه ( خب گفتیم بر پایه ۳۲ بیت حساب میکنه، و همچنین گفتیم محاسبات از سمت راست به چپ انجام میشه )
  • خب گفتیم & زمانی ۱ میشه که هر ۲بیت ۱ باشند، خب نگاه کنید در ردیف اول از سمت راست به چپ دومین بیت ۱ هست، دوباره در ردیف دوم از سمت راست به چپ دومین بیت باز ۱ هست، پس خروجی ۱ میندازه
  • کاری به اون صفرهای اضافه نداشه باشید، خب گفتیم سیستم محاسبات رو برپایه ۳۲ بیت انجام میده، پس اون صفرهای اضافی فقط برای اینه که مثلا کار سیستم رو شبیه سازی کرده باشیم.

 

  • در نهایت چیزی که سیستم محاسبه کرده و خروجیشو میده به ما

امتحان کنید

Free-Learn

عملگر بیتی | در جاوااسکریپت

خب اینم مشخصه دیگه، داره میگه (یا) ( به انگلیسی OR ) ، میگه اگه یکی از بیت ها ۱ بود تو در خروجی ۱ بنداز و در غیراینصورت ۰ بنداز.

شکل کلی برای استفاده از این عملگر :

  • X = اون عددی که قراره عملیات روش انجام بشه
  • [ | ] = عملگر بیتی ما
  • Y = اون عددی که قراره عملیات روش انجام بشه

مثال :

  • چیزی که خودمون در ظاهر میبینیم و به سیستم دادیم

 

  • چیزی که سیستم پشت پرده حساب میکنه

 

در نهایت چیزی که سیستم محاسبه کرده و خروجیشو میده به ما

امتحان کنید

Free-Learn

عملگر بیتی ^ در جاوااسکریپت

این عملگر داره میگه زمانی نتیجه ۰ هست که هر دو بیت یا ۱ یا ۰ باشند، و در غیراینصورت نتیجه ۱ هست.

شکل کلی برای استفاده از این عملگر :

  • X = اون عددی که قراره عملیات روش انجام بشه
  • [ ^ ] = عملگر بیتی ما
  • Y = اون عددی که قراره عملیات روش انجام بشه

مثال :

  • چیزی که خودمون در ظاهر میبینیم و به سیستم دادیم

 

  • چیزی که سیستم پشت پرده حساب میکنه

 

  • در نهایت چیزی که سیستم محاسبه کرده و خروجیشو میده به ما

امتحان کنید

Free-Learn

عملگر بیتی ~ در جاوااسکریپت

در ادامه آموزش کار با عملگرهای بیتی در جاوااسکریپت میخوایم با عملگر معکوس یا ( Reverse ) در زبان جاوااسکریپت آشنا بشیم ، این عملگر کلا کارش معکوس کننده هست، یعنی اونایی ۱ هستند رو ۰ میکنه و اونایی که ۰ هستند رو ۱

شکل کلی برای استفاده از این عملگر :

  • [ ~ ] = عملگر بیتی ما
  • X = اون عددی که قراره عملیات روش انجام بشه

مثال :

  • چیزی که خودمون در ظاهر میبینیم و به سیستم دادیم

 

  • چیزی که سیستم پشت پرده حساب میکنه

 

  • در نهایت چیزی که سیستم محاسبه کرده و خروجیشو میده به ما

امتحان کنید

Free-Learn

عملگر بیتی >> در جاوااسکریپت

با استفاده از این عملگر میتونیم بیت هارو از سمت راست به سمت چپ تغییر مکان ( انتقال ) بدیم ، تو این عملگر وقتی مثلا بیت ها به سمت چپ انتقال داده میشن جای خالیشون از سمت راستش با ۰ پُر میشه.

میتونیم اینجوری بگیم که وقتی بیت ها به سمت چپ هُل داده میشن، اون صفرهایی که در سمت چپ تر قرار دارند از اونور خارج میشن و میان در سمت راست بصورت خودکار اضافه میشن. ( لطفا به تصویر زیر توجه نمایید )

کار با عملگرهای بیتی در جاوااسکریپت

شکل کلی برای استفاده از این عملگر :

  • X = اون عددی که قراره عملیات روش انجام بشه
  • [ << ] = عملگر بیتی ما
  • Y = اون عددی که مشخص میکنه تعداد بیت های انتقال چقدر باشند

مثال :

  • چیزی که خودمون در ظاهر میبینیم و به سیستم دادیم

 

  • چیزی که سیستم پشت پرده حساب میکنه ( بیت هارو به اندازه ۲جایگاه به سمت چپ هُل داد و جاشون رو با ۰ پر کرد )

کار با عملگرهای بیتی در جاوااسکریپت

 

  • در نهایت چیزی که سیستم محاسبه کرده و خروجیشو میده به ما

امتحان کنید

Free-Learn

عملگر بیتی << در جاوااسکریپت

با استفاده از این عملگر میتونیم بیت هارو از سمت چپ به سمت راست با حفظ علامت ( Signed ) تغییر مکان ( انتقال ) بدیم ، تو این عملگر وقتی مثلا به سمت راست انتقال داده میشه جای خالیش از سمت چپش با ۰ پُر میشه و اون بیتی که در سمت راستش بوده حذف میشه ( از بین میره )

شکل کلی برای استفاده از این عملگر :

  • X = اون عددی که قراره عملیات روش انجام بشه
  • [ >> ] = عملگر بیتی ما
  • Y = اون عددی که مشخص میکنه تعداد بیت های انتقال چقدر باشند

مثال :

  • چیزی که خودمون در ظاهر میبینیم و به سیستم دادیم

 

  • چیزی که سیستم پشت پرده حساب میکنه ( بیت هارو به اندازه ۲جایگاه به سمت راست هُل داد و هرچی جلوش بود رو نابود کرد )

کار با عملگرهای بیتی در جاوااسکریپت
برای مشاهده در اندازه اصلی کلیک کنید

 

  • در نهایت چیزی که سیستم محاسبه کرده و خروجیشو میده به ما

امتحان کنید

Free-Learn

عملگر بیتی <<< در جاوااسکریپت

این عملگر شبیه همون << هست و میتونیم بیت هارو از سمت چپ به سمت راست تغییر مکان ( انتقال ) بدیم، فقط تفاوتش تو اینه که بیت علامت ۰ میشه و همیشه خروجی یه خروجی غیر منفی ( یک عدد صحیح بدون علامت و در قالب ۳۲ بیتی ) می باشد.

شکل کلی برای استفاده از این عملگر :

  • X = اون عددی که قراره عملیات روش انجام بشه
  • [ >>> ] = عملگر بیتی ما
  • Y = اون عددی که مشخص میکنه تعداد بیت های انتقال چقدر باشند

مثال :

  • چیزی که خودمون در ظاهر میبینیم و به سیستم دادیم

 

  • چیزی که سیستم پشت پرده حساب میکنه

 

  • در نهایت چیزی که سیستم محاسبه کرده و خروجیشو میده به ما

امتحان کنید

Free-Learn

مثال های بیشتر

مثال شماره ۱ : دریافت یک عدد در مبنای ۱۰ و تبدیل آن به مبنای ۲

امتحان کنید

Free-Learn

دریافت PDF یا پرینت این مطلب