JavaScript:عملیات‌های بیتی در جاوااسکریپت

از ویکی کد
پرش به ناوبری پرش به جستجو
میانبر:
الگو:اج
دورهٔ آموزشی جاوااسکریپت
Javascript.jpg
جاوااسکریپت
موارد آموزشی
۱آموزش جاوااسکریپت
۲مقدمه‌ای بر جاوااسکریپت
۳JavaScript:قوانین و اصول اولیه زبان جاوااسکریپت
۴JavaScript:خروجی جاوااسکریپت
۵JavaScript:عبارت‌ها در جاوااسکریپت
۶JavaScript:شیوهٔ نوشتن (Syntax) عبارات یا دستورات در جاوااسکریپت
۷JavaScript:نظرات یا کامنت‌ها (Comments) در جاوااسکریپت
۸JavaScript:متغیرها در جاوااسکریپت
۹JavaScript:عملگرهای جاوااسکریپت
۱۰JavaScript:عملگرهای ریاضی در جاوااسکریپت
۱۱JavaScript:عملگرهای مقداردهی در جاوااسکریپت
۱۲JavaScript:انواع داده‌ها در جاوااسکریپت
۱۳JavaScript:توابع در جاوااسکریپت
۱۴JavaScript:اشیاء (object) در جاوااسکریپت
۱۵JavaScript:رویدادها در جاوااسکریپت
۱۶JavaScript:رشته‌های متنی (string) در جاوااسکریپت
۱۷JavaScript:متدهای نوع داده متنی یا رشته‌ای در جاوااسکریپت
۱۸JavaScript:اعداد در جاوااسکریپت
۱۹JavaScript:متدهای داده‌های عددی در جاوااسکریپت
۲۰JavaScript:آرایه‌ها در جاوااسکریپت
۲۱JavaScript:متدهای آرایه در جاوااسکریپت
۲۲JavaScript:مرتب‌سازی آرایه‌ها در جاوااسکریپت
۲۳JavaScript:متدهای پیمایش آرایه در جاوااسکریپت
۲۴JavaScript:اشیاء تاریخ و زمان در جاوااسکریپت
۲۵JavaScript:فرمت‌های تاریخ و زمان در جاوااسکریپت
۲۶JavaScript:متدهای دریافت تاریخ و زمان در جاوااسکریپت
۲۷JavaScript:متدهای تنظیم زمان و تاریخ در جاوااسکریپت
۲۸JavaScript:شی ریاضی (Math) در جاوااسکریپت
۲۹JavaScript:ایجاد عدد تصادفی در جاوااسکریپت
۳۰JavaScript:مقادیر بولین (Booleans) در جاوااسکریپت
۳۱JavaScript:عملگرهای منطقی و مقایسه‌ای در جاوااسکریپت
۳۲JavaScript:ساختار if else و else if در جاوااسکریپت
۳۳JavaScript:تکه کد Switch در جاوا اسکریپت
۳۴JavaScript:حلقه For در جاوااسکریپت
۳۵JavaScript:حلقه While در جاوااسکریپت
۳۶JavaScript:کلمات کلیدی Break و Continue در جاوااسکریپت
۳۷JavaScript:تبدیل نوع داده‌ها در جاوااسکریپت
۳۸JavaScript:عملیات‌های بیتی در جاوااسکریپت
۳۹JavaScript:عبارات با قاعده در جاوااسکریپت
۴۰JavaScript:خطاها در جاوااسکریپت - رخ دادن خطا و رفع آن
۴۱JavaScript:Scope در جاوااسکریپت
۴۲JavaScript:Hoisting یا جا به جایی کدها در جاوااسکریپت
۴۳JavaScript:استفاده از مد یا حالت سخت‌گیرانه (use strict) در جاوااسکریپت
۴۴JavaScript:کلمه کلیدی This در جاوااسکریپت
۴۵JavaScript:کلمه کلیدی Let در جاوااسکریپت
۴۶JavaScript:ثابت‌ها در جاوااسکریپت
۴۷JavaScript:تعریف توابع به صورت پیکان
۴۸JavaScript:کلاس‌ها در جاوااسکریپت
۴۹JavaScript:اشکال‌زدایی در جاوااسکریپت
۵۰JavaScript:راهنمای استایل و استانداردهای کدنویسی در جاوااسکریپت
۵۱JavaScript:بهترین تمرینات جاوااسکریپت
۵۲JavaScript:اشتباهات رایج در برنامه‌نویسی جاوااسکریپت
۵۳JavaScript:کارایی در جاوااسکریپت
۵۴JavaScript:کلمات رزرو شده در جاوااسکریپت
۵۵JavaScript:ورژن‌های جاوااسکریپت
۵۶JavaScript:ECMAScript 5 - JavaScript 5
۵۷JavaScript:ECMAScript 6 - ECMAScript 2015
۵۸JavaScript:جیسون (JSON) در جاوااسکریپت
فرم‌ها
۱JavaScript:فرم‌ها در جاوااسکریپت
۲JavaScript:API ارزشیابی در جاوااسکریپت
اشیاء (Object)
۱JavaScript:اشیاء در جاوااسکریپت
۲JavaScript:ویژگی‌های اشیاء در جاوااسکریپت
۳JavaScript:متدهای اشیاء در جاوااسکریپت
۴JavaScript:روش‌های دسترسی به شیء در جاوااسکریپت
۵JavaScript:سازنده‌های شیء در جاوااسکریپت
۶JavaScript:شکل اصلی شیء در جاوااسکریپت
۷JavaScript:متدهای شیء در ورژن ES5 جاوااسکریپت
تابع
۱JavaScript:تعریف تابع در جاوااسکریپت
۲JavaScript:پارامتر توابع در جاوااسکریپت
۳JavaScript:فراخوانی تابع در جاوااسکریپت
۴JavaScript:صدا کردن تابع در جاوااسکریپت
۵JavaScript:تابع Apply در جاوااسکریپت
۶JavaScript:بسته‌ها (به انگلیسی: Closures) در جاوااسکریپت
HTML DOM
۱JavaScript:HTML DOM در جاوااسکریپت
۲JavaScript:متدهای HTML DOM در جاوااسکریپت
۳JavaScript:HTML DOM Document در جاوااسکریپت
۴JavaScript:عناصر HTML DOM در جاوااسکریپت
۵JavaScript:HTML DOM در جاوااسکریپت - تغییر محتوای HTML
۶JavaScript:DOM در جاوااسکریپت - تغییر CSS
۷JavaScript:انیمیشن در HTML DOM جاوااسکریپت
۸JavaScript:رویدادها در HTML DOM جاوااسکریپت
۹JavaScript:شنونده رویداد در HTML DOM جاوااسکریپت
۱۰JavaScript:پیمایش در HTML DOM جاوااسکریپت
۱۱JavaScript:عناصر (گره‌ها) HTML DOM در جاوااسکریپت
۱۲JavaScript:مجموعه‌های HTML DOM جاوااسکریپت
۱۳JavaScript:لیست گره‌ها در HTML DOM جاوااسکریپت
Browser BOM
۱JavaScript:پنجره جاوااسکریپت - مدل شیء مرورگر
۲JavaScript:پنجره صفحه نمایش در جاوااسکریپت
۳JavaScript:موقعیت پنجره در جاوااسکریپت
۴JavaScript:تاریخچه پنجره در جاوااسکریپت
۵JavaScript:ناوبری پنجره در جاوااسکریپت
۶JavaScript:جعبه پیغام جاوااسکریپت
۷JavaScript:رویدادهای زمان‌بندی شده در جاوااسکریپت
۸JavaScript:کوکی‌های جاوااسکریپت
AJAX
۱JavaScript:مقدمه‌ای بر AJAX
۲JavaScript:AJAX - شیء XMLHttpRequest
۳JavaScript:AJAX - ارسال یک درخواست به سرور
۴AJAX - پاسخ سرور
۵JavaScript:مثال‌های XML در AJAX
۶JavaScript:مثال‌های PHP در AJAX
۷JavaScript:مثال‌های ASP در AJAX
۸JavaScript:مثال پایگاه داده در AJAX
۹JavaScript:نرم‌افزارهای XML
۱۰JavaScript:مثال‌های AJAX
JSON
۱JavaScript:مقدمه‌ای بر JSON
۲JavaScript:شیوهٔ نوشتار JSON
۳JavaScript:JSON در برابر XML
۴JavaScript:انواع داده‌های مجاز در JSON
۵متد JSON.parse()
۶متد JSON.stringify()
۷JavaScript:اشیاء JSON
۸JavaScript:آرایه‌ها در JSON
۹JavaScript:PHP در JSON
۱۰JavaScript:HTML در JSON
۱۱JavaScript:JSONP
jQuery
۱JavaScript:جاوااسکریپت / انتخابگرهای DOM جی‌کوئری
۲JavaScript:جاوااسکریپت / عناصر HTML جی‌کوئری
۳JavaScript:جاوااسکریپت / استایل‌های CSS در جی‌کوئری
۴JavaScript:جاوااسکریپت / HTML DOM در جی‌کوئری


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

عملگر نام مثال
& AND در صورتی که هر دو بیت برابر با یک باشند هر بیت را یک می‌کند.
| OR در صورتی یکی از دو بیت یک باشد، هر بیت را یک می‌کند.
^ XOR در صورتی که فقط یکی از دو بیت یک باشد، هر بیت را یک می‌کند.
~ NOT همه بیت‌ها را برعکس می‌کند.
<< Zero fill left shift شیفت سمت چپ به وسیلهٔ پوش کردن صفراز سمت راست و اجازه خارج شدن به چپ‌ترین بیت
>> Signed right shift شیفت سمت راست با پوش کردن کپی از چپ‌ترین بیت از سمت چپ و اجازه خارج شدن به راست‌ترین بیت
>>> Zero fill right shift شیفت راست با پوش کردن صفر از سمت چپ و اجازه خارج شدن به راست‌ترین بیت

مثال

نتیجه دستور یکسان نتیجه عملگر
۰۰۰۱ ۰۱۰۱ & ۰۰۰۱ ۱ ۵ & ۱
۰۱۰۱ 0101 | 0001 ۵ 5 | 1
۱۰۱۰ ~۰۱۰۱ ۱۰ ~ ۵
۱۰۱۰ ۰۱۰۱ << ۱ ۱۰ ۵ << ۱
۰۱۰۰ ۰۱۰۱ ^ ۰۰۰۱ ۴ ۵ ^ ۱
۰۰۱۰ ۰۱۰۱ >> ۱ ۲ ۵ >> ۱
۰۰۱۰ ۰۱۰۱ >>> ۱ ۲ ۵ >>> ۱

جاوااسکریپت از عملوندهای ۳۲ بیتی استفاده می‌کند

جاوااسکریپت تمامی اعداد را به صورت اعداد ۶۴ بیت اعشاری ذخیره می‌کند، اما عملیات‌های ۳۲ بیت بر روی اعداد ۳۲ بیتی باینری صورت می‌پذیرد.

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

بعد از اینکه عملیات بیتی صورت گرفت، نتیجه به اعداد ۶۴ بیتی جاوااسکریپت تبدیل می‌شود.


And (به فارسی: واو) بیتی

زمانی که And بیتی روی یک جفت از بیت‌ها صورت می‌گیرد، اگر دو بیت ۱ باشند، مقدار ۱ را برمی‌گرداند.

مثال یک بیتی:

عملگر نتیجه
۰ & ۰ ۰
۰ & ۱ ۰
۱ & ۰ ۰
۱ & ۱ ۱

مثال چهاربیتی:

عملگر نتیجه
1111 & 0000 0000
1111 & 0001 0001
1111 & 0010 0010
1111 & 0100 0100

Or (به فارسی: یا) بیتی

زمانی یا بیتی یا or بیتی بر روی یک جفت از بیت‌ها عمل می‌کند، اگر یکی از بیت‌ها یک باشد، مقدار یک را برمی‌گرداند:

مثال یک بیتی:

نتیجه عملگر
۰ 0 | 0
۱ 0 | 1
۱ 1 | 0
۱ 1 | 1

مثال چهاربیتی:

نتیجه عملگر
۱۱۱۱ 1111 | 0000
۱۱۱۱ 1111 | 0001
۱۱۱۱ 1111 | 0010
۱۱۱۱ 1111 | 0100

XOR بیتی

اگر Xor بیتی روی یک جفت از بیتها صورت بگیرد، در صورتی که بیت‌ها متفاوت باشند مقدار یک را برمی‌گرداند:

مثال یک بیتی:

نتیجه عملگر
۰ ۰ ^ ۰
۱ ۰ ^ ۱
۱ ۱ ^ ۰
۰ ۱ ^ ۱

مثال چهاربیتی:

نتیجه عملگر
۱۱۱۱ ۱۱۱۱ ^ ۰۰۰۰
۱۱۱۰ ۱۱۱۱ ^ ۰۰۰۱
۱۱۰۱ ۱۱۱۱ ^ ۰۰۱۰
۱۰۱۱ ۱۱۱۱ ^ ۰۱۰۰

AND بیتی در جاوااسکریپت (&)

And بیتی در صورتی مقدار یک را برمی‌گرداند که هر دو بیت یک باشند:

مبنای ده باینری
۵ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱
۱ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱
۵ & ۱ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰1 (1)

مثال

var x = 5 & 1;

OR بیتی در جاوااسکریپت (|)

یا بیتی یا OR بیتی در صورتی که یکی از بیت‌ها یک باشد مقدار یک را برمی‌گرداند:

مبنای ده باینری
۵ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱
۱ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱
5 | 1 ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰1 (5)

مثال

var x = 5 | 1;

XOR بیتی در جاوااسکریپت (^)

Xor بیتی در صورتی که بیت‌ها متفاوت باشند مقدار یک را برمی‌گرداند:

مبنای ده باینری
۵ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱
۱ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱
۵ ^ ۱ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰0 (4)

مثال

var x = 5 ^ 1;

NOT بیتی در جاوااسکریپت (~)

مبنای ده باینری
۵ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱
۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱0 (-6)

مثال

var x = ~5;

شیفت سمت چپ (Zero Fill در جاوااسکریپت (>>)

این شیفت چپ است. یک یا چند بیت صفر از سمت راست پوش می‌شود و چپ‌ترین بیت به بیرون می‌افتد:

مبنای ده باینری
۵ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱
۵ << ۱ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱0 (10)

مثال

var x = 5 << 1;

شیفت (نگه داری علامت) سمت راست (<<)

این شیفت سمت راست است. کپی از سمت چپ‌ترین بیت از سمت چپ پوش می‌شود و راست‌ترین بیت به بیرون می‌افتد:

مبنای ده باینری
-5 ۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱۱
-5 >> 1 ۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱ (-۳)

مثال

var x = -5 >> 1;

شیفت سمت راست (بر مبنای صفر) (<<<)

این شیفت سمت راست بر مبنای صفر است. یک یا چند بیت صفر از سمت چپ پوش می‌شود و راست‌ترین بیت بیرون می‌افتد:

مبنای ده باینری
۵ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱
۵ >>> ۱ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱0 (2)

مثال

var x = 5 >>> 1;

اعداد باینری

درک کردن اعداد باینری با یک مجموعه از بیت‌ها بسیار آسان است.

عدد دسیمال عدد باینری
۱ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱
۲ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰
۴ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۰
۸ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۰۰
۱۶ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۰۰۰
۳۲ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۰۰۰۰
۶۴ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۰۰۰۰۰

تنظیم چند بیت بیشتر موجب آشکار شدن روش باینری می‌شود:

عدد دسیمال عدد باینری
۵ (۴ + ۱) ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱
۱۳ (۸ + ۴ + ۱) ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۱۰۱
۴۵ (۳۲ + ۸ + ۴ + ۱) ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱۱۰۱

اعداد باینری در جاوااسکریپت به دو صورت ذخیره می‌شوند.

این بدان معناست که یک عدد منفی حاصل Not کردن با جمع عدد با عدد یک است:

عدد دسیمال عدد باینری
۵ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱
-5 ۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱۱
۶ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۱۰
-6 ۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱۰
۴۰ ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱۰۰۰
-40 ۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱۱۰۰۰

تبدیل اعداد دسیمال (مبنای ده) به باینری

مثال

function dec2bin(dec){
return (dec >>> 0).toString(2);
}

تبدیل اعداد باینری به دسیمال (مبنای ده)

مثال

function bin2dec(bin){
return parseInt(bin, 2).toString(10);
}

منابع آموزشی