عملیات‌های بیتی

از ویکی‌کد
پرش به ناوبری پرش به جستجو
Main Page Tutorial
JavaScript-menu.png
موارد آموزشی
فرم‌ها در جاوا اسکریپت
اشیاء در جاوا اسکریپت
تابع در جاوا اسکریپت
HTML DOM در جاوا اسکریپت
Browser BOM در جاوا اسکریپت
AJAX در جاوا اسکریپت
JSON در جاوا اسکریپت
جی‌کوئری در برابر جاوا اسکریپت
مرجع جاوا اسکریپت

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

عملگر نام مثال
& 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

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

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

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

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

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

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

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

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

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 (به فارسی: یا) بیتی

زمانی یا بیتی یا 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 بیتی

اگر 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 بیتی در جاوا اسکریپت (&)

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

مبنای ده باینری
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 & 1 00000000000000000000000000000001 (1)

مثال

var x = 5 & 1;


مشاهدهٔ نتیجه


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

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

مبنای ده باینری
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 | 1 00000000000000000000000000000101 (5)

مثال

var x = 5 | 1;


مشاهدهٔ نتیجه


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

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

مبنای ده باینری
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 ^ 1 00000000000000000000000000000100 (4)

مثال

var x = 5 ^ 1;


مشاهدهٔ نتیجه


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

مبنای ده باینری
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)

مثال

var x = ~5;


مشاهدهٔ نتیجه


شیفت سمت چپ (Zero Fill) در جاوا اسکریپت (<<)

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

مبنای ده باینری
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;


مشاهدهٔ نتیجه


اعداد باینری

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

عدد دسیمال عدد باینری
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

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

مثال

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


مشاهدهٔ نتیجه


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

مثال

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


مشاهدهٔ نتیجه


منابع آموزشی