JavaScript Bitwise Operations
عوامل تشغيل JavaScript Bitwise
Operator | Name | Description |
---|---|---|
& | AND | Sets each bit to 1 if both bits are 1 |
| | OR | Sets each bit to 1 if one of two bits is 1 |
^ | XOR | Sets each bit to 1 if only one of two bits is 1 |
~ | NOT | Inverts all the bits |
<< | Zero fill left shift | Shifts left by pushing zeros in from the right and let the leftmost bits fall off |
>> | Signed right shift | Shifts right by pushing copies of the leftmost bit in from the left, and let the rightmost bits fall off |
>>> | Zero fill right shift | Shifts right by pushing zeros in from the left, and let the rightmost bits fall off |
أمثلة
Operation | Result | Same as | Result |
---|---|---|---|
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 معاملات Bitwise 32 بت
يخزن JavaScript الأرقام كأرقام فاصلة عائمة 64 بت ، ولكن يتم تنفيذ جميع العمليات التي تتم باستخدام 32 بت على أرقام ثنائية.
قبل تنفيذ عملية بت ، يحول JavaScript الأرقام إلى 32 بت الأعداد الصحيحة الموقعة.
بعد تنفيذ عملية البت ، يتم تحويل النتيجة مرة أخرى إلى أرقام جافا سكريبت 64 بت.
تستخدم الأمثلة أعلاه 4 بت أرقام ثنائية غير موقعة. بسبب هذا ~ 5 إرجاع 10.
نظرًا لأن JavaScript يستخدم 32 بت أعدادًا صحيحة موقعة ، فلن يقوم بإرجاع 10. سيعود -6.
00000000000000000000000000000101 (5)
111111111111111111111111111010 (~ 5 = -6)
يستخدم عدد صحيح بعلامة البت الموجود في أقصى اليسار كعلامة ناقص.
أحادي المعامل AND
عندما يتم تنفيذ AND بطريقة بت على زوج من البتات ، فإنها تُرجع 1 إذا كانت كلتا البتتين 1.
عملية | نتيجة |
---|---|
0 & 0 | 0 |
0 & 1 | 0 |
1 و 0 | 0 |
1 & 1 | 1 |
عملية | نتيجة |
---|---|
1111 و 0000 | 0000 |
1111 و 0001 | 0001 |
1111 و 0010 | 0010 |
1111 و 0100 | 0100 |
أحادي المعامل OR
عندما يتم تنفيذ OR على مستوى بت على زوج من البتات ، فإنها تُرجع 1 إذا كانت إحدى البتات 1:
عملية | نتيجة |
---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
عملية | نتيجة |
---|---|
1111 | 0000 | 1111 |
1111 | 0001 | 1111 |
1111 | 0010 | 1111 |
1111 | 0100 | 1111 |
Bitwise XOR
عندما يتم تنفيذ XOR بت على زوج من البتات ، فإنها تُرجع 1 إذا كانت البتات مختلفة:
عملية | نتيجة |
---|---|
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
عملية | نتيجة |
---|---|
1111 ^ 0000 | 1111 |
1111 ^ 0001 | 1110 |
1111 ^ 0010 | 1101 |
1111 ^ 0100 | 1011 |
JavaScript Bitwise AND (&)
Bitwise AND تُرجع 1 فقط إذا كانت كلتا البتتين 1:
عدد عشري | الثنائية |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 & 1 | 00000000000000000000000000000001 (1) |
مثال
let x = 5 & 1;
JavaScript Bitwise OR (|)
طريقة Bitwise OR تُرجع 1 إذا كانت إحدى وحدات البت هي 1:
عدد عشري | الثنائية |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 | 1 | 00000000000000000000000000000101 (5) |
مثال
let x = 5 | 1;
JavaScript Bitwise XOR (^)
تقوم Bitwise XOR بإرجاع 1 إذا كانت البتات مختلفة:
عدد عشري | الثنائية |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 ^ 1 | 00000000000000000000000000000100 (4) |
مثال
let x = 5 ^ 1;
JavaScript Bitwise NOT (~)
عدد عشري | الثنائية |
---|---|
5 | 00000000000000000000000000000101 |
~ 5 | 111111111111111111111111111010 (-6) |
مثال
let x = ~5;
جافا سكريبت (تعبئة صفرية) إزاحة لليسار باتجاه أحادي (<<)
هذا هو صفر ملء اليسار التحول. يتم دفع واحد أو أكثر من وحدات البت الصفرية من اليمين ، وتسقط وحدات البت الموجودة في أقصى اليسار:
عدد عشري | الثنائية |
---|---|
5 | 00000000000000000000000000000101 |
5 << 1 | 00000000000000000000000000001010 (10) |
مثال
let x = 5 << 1;
JavaScript (Sign Preserving) التحول إلى اليمين باتجاه Bitwise (>>)
هذه علامة تحافظ على التحول الصحيح. يتم دفع نسخ من أقصى اليسار للداخل من اليسار ، والبتات الموجودة في أقصى اليمين تسقط:
عدد عشري | الثنائية |
---|---|
-5 | 111111111111111111111111111011 |
-5 >> 1 | 111111111111111111111111111101 (-3) |
مثال
let x = -5 >> 1;
جافا سكريبت (تعبئة صفرية) التحول الأيمن (>>>)
هذا هو التحول الصحيح صفر ملء. يتم دفع واحد أو أكثر من وحدات البت الصفرية إلى الداخل من اليسار ، وتسقط وحدات البت الموجودة في أقصى اليمين:
عدد عشري | الثنائية |
---|---|
5 | 00000000000000000000000000000101 |
5 >>> 1 | 00000000000000000000000000000010 (2) |
مثال
let x = 5 >>> 1;
الأعداد الثنائية
من السهل فهم الأرقام الثنائية مع مجموعة بت واحد فقط:
التمثيل الثنائي | قيمة عشرية |
---|---|
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) |
يتم تخزين الأرقام الثنائية لجافا سكريبت في تنسيق مكمل اثنين.
هذا يعني أن الرقم السالب هو ليس على مستوى أحادي الرقم بالإضافة إلى 1:
التمثيل الثنائي | قيمة عشرية |
---|---|
00000000000000000000000000000101 | 5 |
111111111111111111111111111011 | -5 |
00000000000000000000000000000110 | 6 |
111111111111111111111111111010 | -6 |
00000000000000000000000000101000 | 40 |
11111111111111111111111111011000 | -40 |
تحويل عشري إلى ثنائي
مثال
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
تحويل ثنائي إلى عشري
مثال
function bin2dec(bin){
return parseInt(bin, 2).toString(10);
}