JavaScript:عملیاتهای بیتی در جاوااسکریپت
نسخهای که میبینید نسخهای قدیمی از صفحهاست که توسط Admin (بحث | مشارکتها) در تاریخ ۱۰ آبان ۱۳۹۸، ساعت ۲۳:۲۱ ویرایش شده است. این نسخه ممکن است تفاوتهای عمدهای با نسخهٔ فعلی بدارد. |
https://www.w3schools.com/js/js_bitwise.asp
محتویات
- ۱ JavaScript Bitwise Operations
- ۱.۱ JavaScript Bitwise Operators
- ۱.۲ Examples
- ۱.۳ JavaScript Uses 32 bits Bitwise Operands
- ۱.۴ Bitwise AND
- ۱.۵ Bitwise OR
- ۱.۶ Bitwise XOR
- ۱.۷ JavaScript Bitwise AND (&)
- ۱.۸ JavaScript Bitwise OR (|)
- ۱.۹ JavaScript Bitwise XOR (^)
- ۱.۱۰ JavaScript Bitwise NOT (~)
- ۱.۱۱ JavaScript (Zero Fill) Bitwise Left Shift (<<)
- ۱.۱۲ JavaScript (Sign Preserving) Bitwise Right Shift (>>)
- ۱.۱۳ JavaScript (Zero Fill) Right Shift (>>>)
- ۱.۱۴ Binary Numbers
- ۱.۱۵ Converting Decimal to Binary
- ۱.۱۶ Converting Binary to Decimal
JavaScript Bitwise Operations
عملیات های بیتی در جاوا اسکریپت
JavaScript Bitwise Operators
عملگر های بیتی در جاوا اسکریپت
عملگر | نام | مثال |
& | AND | در صورتی که هر دو بیت برابر با یک باشند هر بیت را یک می کند. |
| | OR | در صورتی یکی از دو بیت یک باشد ، هر بیت را یک می کند. |
^ | XOR | در صورتی که فقط یکی از دو بیت یک باشد ، هر بیت را یک می کند. |
~ | NOT | همه بیت ها را برعکس می کند. |
<< | Zero fill left shift | شیفت سمت چپ به وسیله ی پوش کردن صفراز سمت راست و اجازه خارج شدن به چپ ترین بیت |
>> | Signed right shift | شیفت سمت راست با پوش کردن کپی از چپ ترین بیت از سمت چپ و اجازه خارج شدن به راست ترین بیت |
>>> | Zero fill right shift | شیفت راست با پوش کردن صفر از سمت چپ و اجازه خارج شدن به راست ترین بیت |
Examples
نتیجه | دستور یکسان | نتیجه | عملگر |
0001 | 0101 & 0001 | 1 | 5 & 1 |
0101 | 0101 | 0001 | 5 | 5 | 1 |
1010 | ~0101 | 10 | ~ 5 |
1010 | 0101 << 1 | 10 | 5 << 1 |
0100 | 0101 ^ 0001 | 4 | 5 ^ 1 |
0010 | 0101 >> 1 | 2 | 5 >> 1 |
0010 | 0101 >>> 1 | 2 | 5 >>> 1 |
JavaScript Uses 32 bits Bitwise Operands
جاوا اسکریپت از عملوند های 32 بیتی استفاده می کند
JavaScript stores numbers as 64 bits floating point numbers, but all bitwise operations are performed on 32 bits binary numbers.
جاوا اسکریپت تمامی اعداد را به صورت اعداد 64 بیت اعشاری ذخیره می کند ، اما عملیات های 32 بیت بر روی اعداد 32 بیتی باینری صورت می پذیرد .
Before a bitwise operation is performed, JavaScript converts numbers to 32 bits signed integers.
قبل از اینکه یک عملیات بیتی انجام شود ، جاوا اسکریپت عدد را به یک عدد صحیح 32 بیتی علامت دار تبدیل می کند.
After the bitwise operation is performed, the result is converted back to 64 bits JavaScript numbers.
بعد از اینکه عملیات بیتی صورت گرفت ، نتیجه به اعداد 64 بیتی جاوا اسکریپت تبدیل می شود .
The examples above uses 4 bits unsigned binary numbers. Because of this ~ 5 returns 10.
مثال بالا از اعداد باینری 4 بیتی استفاده می کند . به خاطر همین امر ~ 5 عدد 10 را برمی گرداند .
Since JavaScript uses 32 bits signed integers, it will not return 10. It will return -6.
از انجایی که جاوا اسکریپت از اعداد صحیح 32 بیتی علامتدار استفاده می کند ، به جای مقدار 10 ، مقدار 6- را برمی گرداند .
00000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5 = -6)
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:
مثال یک بیتی :
نتیجه | عملگر |
0 | 0 & 0 |
0 | 0 & 1 |
0 | 1 & 0 |
1 | 1 & 1 |
4 bits example:
مثال چهاربیتی :
عملگر | نتیجه |
1111 & 0000 | 0000 |
1111 & 0001 | 0001 |
1111 & 0010 | 0010 |
1111 & 0100 | 0100 |
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 | 0 | 1 |
1 | 1 | 0 |
1 | 1 | 1 |
4 bits example:
مثال چهاربیتی :
نتیجه | عملگر |
1111 | 1111 | 0000 |
1111 | 1111 | 0001 |
1111 | 1111 | 0010 |
1111 | 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:
مثال یک بیتی :
نتیجه | عملگر |
0 | 0 ^ 0 |
1 | 0 ^ 1 |
1 | 1 ^ 0 |
0 | 1 ^ 1 |
4 bits example:
مثال چهاربیتی :
نتیجه | عملگر |
1111 | 1111 ^ 0000 |
1110 | 1111 ^ 0001 |
1101 | 1111 ^ 0010 |
1011 | 1111 ^ 0100 |
JavaScript Bitwise AND (&)
AND بیتی در جاوا اسکریپت (&)
Bitwise AND returns 1 only if both bits are 1:
And بیتی در صورتی مقدار یک را برمی گرداند که هر دو بیت یک باشند :
مبنای ده | باینری |
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 & 1 | 00000000000000000000000000000001 (1) |
Example
var x = 5 & 1;
JavaScript Bitwise OR (|)
یا (Or بیتی ) در جاوا اسکریپت
Bitwise OR returns 1 if one of the bits are 1:
یا بیتی یا OR بیتی در صورتی که یکی از بیت ها یک باشد مقدار یک را برمی گرداند :
مبنای ده | باینری |
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 | 1 | 00000000000000000000000000000101 (5) |
Example
var x = 5 | 1;
JavaScript Bitwise XOR (^)
Xor بیتی در جاوا اسکریپت (^)
Bitwise XOR returns 1 if the bits are different:
Xor بیتی در صورتی که بیت ها متفاوت باشند مقدار یک را برمی گرداند :
مبنای ده | باینری |
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 ^ 1 | 00000000000000000000000000000100 (4) |
Example
var x = 5 ^ 1;
JavaScript Bitwise NOT (~)
Not بیتی در جاوا اسکریپت
مبنای ده | باینری |
5 | 00000000000000000000000000000101 |
~5 | 11111111111111111111111111111010 (-6) |
Example
var x = ~5;
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:
این شیفت چپ است . یک و یا چند بیت صفر از سمت راست پوش می شود و چپ ترین بیت به بیرون می افتد :
مبنای ده | باینری |
5 | 00000000000000000000000000000101 |
5 << 1 | 00000000000000000000000000001010 (10) |
Example
var x = 5 << 1;
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 | 11111111111111111111111111111011 |
-5 >> 1 | 11111111111111111111111111111101 (-3) |
Example
var x = -5 >> 1;
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:
این شیفت سمت راست بر مبنای صفر است . یک و یا چند بیت صفر از سمت چپ پوش می شود و راست ترین بیت بیرون می افتد :
مبنای ده | باینری |
5 | 00000000000000000000000000000101 |
5 >>> 1 | 00000000000000000000000000000010 (2) |
Example
var x = 5 >>> 1;
Binary Numbers
اعداد باینری
Binary numbers with only one bit set is easy to understand:
درک کردن اعداد باینری با یک مجموعه از بیت ها بسیار آسان است .
عدد دسیمال | عدد باینری |
1 | 00000000000000000000000000000001 |
2 | 00000000000000000000000000000010 |
4 | 00000000000000000000000000000100 |
8 | 00000000000000000000000000001000 |
16 | 00000000000000000000000000010000 |
32 | 00000000000000000000000000100000 |
64 | 00000000000000000000000001000000 |
تنظیم چند بیت بیشتر موجب آشکار شدن روش باینری می شود :
عدد دسیمال | عدد باینری |
5 (4 + 1) | 00000000000000000000000000000101 |
13 (8 + 4 + 1) | 00000000000000000000000000001101 |
45 (32 + 8 + 4 + 1) | 00000000000000000000000000101101 |
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 | 00000000000000000000000000000101 |
-5 | 11111111111111111111111111111011 |
6 | 00000000000000000000000000000110 |
-6 | 11111111111111111111111111111010 |
40 | 00000000000000000000000000101000 |
-40 | 11111111111111111111111111011000 |
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);
}