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

از ویکی کد
پرش به ناوبری پرش به جستجو

https://www.w3schools.com/js/js_bitwise.asp

JavaScript Bitwise Operations

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

JavaScript Bitwise Operators

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

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

Examples

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

JavaScript Uses 32 bits Bitwise Operands

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

JavaScript stores numbers as 64 bits floating point numbers, but all bitwise operations are performed on 32 bits binary numbers.

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

Before a bitwise operation is performed, JavaScript converts numbers to 32 bits signed integers.

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

After the bitwise operation is performed, the result is converted back to 64 bits JavaScript numbers.

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

The examples above uses 4 bits unsigned binary numbers. Because of this ~ 5 returns 10.

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

Since JavaScript uses 32 bits signed integers, it will not return 10. It will return -6.

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

۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰1 (5)

۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱۰ (~۵ = -۶)

A signed integer uses the leftmost bit as the minus sign.

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

Bitwise AND

و یا And بیتی

When a bitwise AND is performed on a pair of bits, it returns 1 if both bits are 1.

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

One bit example:

مثال یک بیتی:

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

4 bits example:

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

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

Bitwise OR

یا بیتی (Or بیتی)

When a bitwise OR is performed on a pair of bits, it returns 1 if one of the bits are 1:

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

One bit example:

مثال یک بیتی:

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

4 bits example:

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

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

Bitwise XOR

Xor بیتی

When a bitwise XOR is performed on a pair of bits, it returns 1 if the bits are different:

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

One bit example:

مثال یک بیتی:

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

4 bits example:

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

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

JavaScript Bitwise AND (&)

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

Bitwise AND returns 1 only if both bits are 1:

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

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

Example

var x = ۵ & ۱;

JavaScript Bitwise OR (|)

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

Bitwise OR returns 1 if one of the bits are 1:

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

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

Example

var x = ۵ | ۱;

JavaScript Bitwise XOR (^)

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

Bitwise XOR returns 1 if the bits are different:

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

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

Example

var x = ۵ ^ ۱;

JavaScript Bitwise NOT (~)

Not بیتی در جاوا اسکریپت

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

Example

var x = ~۵;

JavaScript (Zero Fill) Bitwise Left Shift (<<)

شیفت سمت چپ (zero fill) در جاوا اسکریپت

This is a zero fill left shift. One or more zero bits are pushed in from the right, and the leftmost bits fall off:

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

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

Example

var x = ۵ << ۱;

JavaScript (Sign Preserving) Bitwise Right Shift (>>)

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

This is a sign preserving right shift. Copies of the leftmost bit are pushed in from the left, and the rightmost bits fall off:

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

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

Example

var x = -۵ >> ۱;

JavaScript (Zero Fill) Right Shift (>>>)

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

This is a zero fill right shift. One or more zero bits are pushed in from the left, and the rightmost bits fall off:

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

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

Example

var x = ۵ >>> ۱;

Binary Numbers

اعداد باینری

Binary numbers with only one bit set is easy to understand:

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

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

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

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

JavaScript binary numbers are stored in two's complement format.

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

This means that a negative number is the bitwise NOT of the number plus 1:

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

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

Converting Decimal to Binary

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

Example

function dec2bin(dec){

return (dec >>> 0).toString(2);

}

Converting Binary to Decimal

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

Example

function bin2dec(bin){

return parseInt(bin, 2).toString(10);

}