100% کامل شده تا
به‌روزرسانی شده در: ۲ ماه پیش

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

از ویکی‌کد، دانشنامهٔ برنامه‌نویسی
پرش به ناوبری پرش به جستجو


عملگرهای بیتی در جاوا اسکریپت [۱] (JavaScript Bitwise Operators)

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

مثال

عملگر نتیجه دستور یکسان نتیجه
5 & 1 1 0101 & 0001 0001
5 | 1 5 0101 | 0001 0101
~ 5 10 ~0101 1010
5 << 1 10 0101 << 1 1010
5 ^ 1 4 0101 ^ 0001 0100
5 >> 1 2 0101 >> 1 0010
5 >>> 1 2 0101 >>> 1 0010

جاوا اسکریپت از عملوندهای ۳۲ بیتی استفاده میکند (JavaScript Uses 32 bits Bitwise Operands)

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

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

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

مثال بالا از اعداد باینری ۴ بیتی استفاده می‌کند. به خاطر همین امر ~ ۵ عدد ۱۰ را برمی‌گرداند.

از آنجایی که جاوا اسکریپت از اعداد صحیح ۳۲ بیتی علامتدار استفاده می‌کند، به جای مقدار ۱۰، مقدار ۶- را برمی‌گرداند.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

یک عدد صحیح علامت‌دار از چپ‌ترین بیت به عنوان بیت علامت استفاده می‌کند.

And بیتی (Bitwise AND)

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

مثال یک بیتی:

عملگر نتیجه
0 & 0 0
0 & 1 0
1 & 0 0
1 & 1 1

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

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

Or بیتی (Bitwise OR)

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

مثال یک بیتی:

عملگر نتیجه
0 ^ 0 0
0 ^ 1 1
1 ^ 0 1
1 ^ 1 0

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

عملگر نتیجه
1111 ^ 0000 1111
1111 ^ 0001 1110
1111 ^ 0010 1101
1111 ^ 0100 1011

XOR بیتی (Bitwise XOR)

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

مثال یک بیتی:

عملگر نتیجه
0 ^ 0 0
0 ^ 1 1
1 ^ 0 1
1 ^ 1 0

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

عملگر نتیجه
1111 ^ 0000 1111
1111 ^ 0001 1110
1111 ^ 0010 1101
1111 ^ 0100 1011

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

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

مبنای ده باینری
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 & 1 00000000000000000000000000000001 (1)


مثال

var x = 5 & 1;


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

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

مبنای ده باینری
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 | 1 00000000000000000000000000000101 (5)


مثال

var x = 5 | 1;


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

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

مبنای ده باینری
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 ^ 1 00000000000000000000000000000100 (4)


مثال

var x = 5 ^ 1;


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

مبنای ده باینری
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)


مثال

var x = ~5;


شیفت سمت چپ در جاوا اسکریپت (<<) (JavaScript (Zero Fill) Bitwise Left Shift (<<))

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

مبنای ده باینری
5 00000000000000000000000000000101
5 << 1 00000000000000000000000000001010 (10)


مثال

var x = 5 << 1;


شیفت (نگه داری علامت) سمت راست (>>) (JavaScript (Sign Preserving) Bitwise Right Shift (>>))

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

مبنای ده باینری
-5 11111111111111111111111111111011
-5 >> 1 11111111111111111111111111111101 (-3)


مثال

var x = -5 >> 1;


شیفت سمت راست (بر مبنای صفر) (>>>) (JavaScript (Zero Fill) Right Shift (>>>))

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

مبنای ده باینری
5 00000000000000000000000000000101
5 >>> 1 00000000000000000000000000000010 (2)


مثال

var x = 5 >>> 1;


اعداد باینری (Binary Numbers)

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

عدد دسیمال عدد باینری
00000000000000000000000000000001 1
00000000000000000000000000000010 2
00000000000000000000000000000100 4
00000000000000000000000000001000 8
00000000000000000000000000010000 16
00000000000000000000000000100000 32
00000000000000000000000001000000 64


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

عدد دسیمال عدد باینری
00000000000000000000000000000101 5 (4 + 1)
00000000000000000000000000001101 13 (8 + 4 + 1)
00000000000000000000000000101101 45 (32 + 8 + 4 + 1)


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

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

عدد دسیمال عدد باینری
00000000000000000000000000000101 5
11111111111111111111111111111011 -5
00000000000000000000000000000110 6
11111111111111111111111111111010 -6
00000000000000000000000000101000 40
11111111111111111111111111011000 -40

تبدیل اعداد دسیمال (مبنای ده) به باینری (Converting Decimal to Binary)

مثال

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

تبدیل اعداد باینری به دسیمال (مبنای ده) (Converting Binary to Decimal)

مثال

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

منابع آموزشی