عملیات بیت در JavaScript

عملیات بیت در JavaScript

عملگر نام توضیح
& AND اگر هر دو مکان 1 باشند، هر مکان را به 1 تنظیم کن
| OR اگر یکی از دو مکان 1 باشد، هر مکان را به 1 تنظیم کن
^ XOR اگر یکی از دو مکان 1 باشد، هر مکان را به 1 تنظیم کن
~ NOT همه مکان‌ها را معکوس کن
<< جابجایی به چپ با پر کردن با صفر از راست به چپ حرکت کرده و اولین مکان را بیرون بیانداز.
>> جابجایی به راست با نشانه از چپ به راست حرکت کرده و کپی اولین مکان را بیرون بیانداز.
>>> جابجایی به راست با پر کردن با صفر از چپ به راست حرکت کرده و آخرین مکان را بیرون بیانداز.

مثال

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

JavaScript از اعداد بیتاری 32 بیت استفاده می‌کند

JavaScript اعداد را به صورت اعداد浮point 64 بیت ذخیره می‌کند، اما تمامی عملیات بیت با اعداد 32 بیت بیتاری انجام می‌شود.

قبل از انجام عملیات بیت، JavaScript اعداد را به اعداد صحیح نشانه‌دار 32 بیت تبدیل می‌کند.

پس از انجام عملیات بیت، نتیجه به اعداد 64 بیت JavaScript تبدیل می‌شود.

مثال‌های بالا از اعداد بی‌نشان 4 بیت استفاده می‌کنند. بنابراین ~ 5 به 10 برمی‌گردد.

به دلیل اینکه JavaScript از اعداد صحیح نشانه‌دار 32 بیت استفاده می‌کند، JavaScript به -6 برمی‌گردد.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~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

عملیات بیت 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 عملیات بیت AND (&)

اگر تمامی مقادیر بیت‌ها 1 باشند، عملیات بیت AND به 1 برمی‌گردد:

دهی دودویی
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 & 1 00000000000000000000000000000001 (1)

مثال

var x = 5 & 1;

شما خودتان امتحان کنید

JavaScript عملیات بیت OR (|)

اگر یکی از دسیم‌ها 1 باشد، عملیات OR به 1 برمی‌گردد:

دهی دودویی
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 | 1 00000000000000000000000000000101 (5)

مثال

var x = 5 | 1;

شما خودتان امتحان کنید

عملیات XOR (^) در جاوااسکریپت

اگر دسیم‌ها متفاوت باشند، XOR به 1 برمی‌گردد:

دهی دودویی
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 ^ 1 00000000000000000000000000000100 (4)

مثال

var x = 5 ^ 1;

شما خودتان امتحان کنید

عملیات NOT (~) در جاوااسکریپت

دهی دودویی
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)

مثال

var x = ~5;

شما خودتان امتحان کنید

حرکت به سمت چپ (<<)(پر کردن صفر) در جاوااسکریپت

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

دهی دودویی
5 00000000000000000000000000000101
5 << 1 00000000000000000000000000001010 (10)

مثال

var x = 5 << 1;

شما خودتان امتحان کنید

حرکت به سمت راست (>>)(با حفظ نشانه) در جاوااسکریپت

این یک حرکت به سمت راست با حفظ نشانه است. اولین عدد از سمت چپ به درون فشرده می‌شود، و آخرین عدد از سمت راست بیرون می‌رود:

دهی دودویی
-5 11111111111111111111111111111011
-5 >> 1 11111111111111111111111111111101 (-3)

مثال

var x = -5 >> 1;

شما خودتان امتحان کنید

حرکت به سمت راست (>>>)(پر کردن صفر) در جاوااسکریپت

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

دهی دودویی
5 00000000000000000000000000000101
5 >>> 1 00000000000000000000000000000010 (2)

مثال

var x = 5 >>> 1;

شما خودتان امتحان کنید

عدد صحیح 32 بیتی (عدد دودویی)

فهمیدن عدد صحیح 32 بیتی که فقط یک دسیم دارد آسان است:

نمودار دو دویی مقدار دهی
00000000000000000000000000000001 1
00000000000000000000000000000010 2
00000000000000000000000000000100 4
00000000000000000000000000001000 8
00000000000000000000000000010000 16
00000000000000000000000000100000 32
00000000000000000000000001000000 64

با تنظیم بیشتر مکان‌های عددی، الگوهای دو دویی را آشکار می‌کنیم:

نمودار دو دویی مقدار دهی
00000000000000000000000000000101 5 (4 + 1)
00000000000000000000000000101000 40 (32 + 8)
00000000000000000000000000101101 45 (32 + 8 + 4 + 1)

اعداد منفی هستند که یک اضافه به کد اضافی دو دویی مثبت می‌شوند:

نمودار دو دویی مقدار دهی
00000000000000000000000000000101 5
11111111111111111111111111111011 -5
00000000000000000000000000101000 40
11111111111111111111111111011000 -40
11111111111111111111111111011001 -41

تبدیل دهی به دو دویی

مثال

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

شما خودتان امتحان کنید

تبدیل دو دویی به دهی

مثال

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

شما خودتان امتحان کنید