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

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);
}

منابع آموزشی[ویرایش]



به‌روزرسانی شده: ۶ ماه پیش