با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، همانطور که می دانیم تمامی داده ها در سیستم های کامپیوتری پس از کامپایل به زبان ماشین یا ۰ و ۱ ترجمه می شوند، و اساس کار تمامی سیستم های رایانه ای با مقادیر بیتی است، بنابراین باید در هر زبان برنامه نویسی که فعالیت دارید، اطلاعاتی عمومی در مورد چگونگی کار با مقادیر و عملگرهای بیتی در آن زبان را داشته باشید. در این بخش نیز ما قصد داریم تا شما را با چگونگی کار با عملگرهای بیتی در جاوا اسکریپت آشنا کنیم.
در ادامه ی این مباحث به انواع عملگرهای بیتی در جاوا اسکریپت و عملکرد هر یک می پردازیم.
عملگر | نام | توضیحات |
---|---|---|
& | AND | اگر هر دو بیت ۱ باشند، نتیجه ۱ خواهد بود. |
| | OR | اگر فقط یکی از بیت ها ۱ باشد، نتیجه ۱ خواهد بود. |
^ | XOR | اگر هر دو مقدار یکی باشند خروجی ۰ می شود. |
~ | NOT | یک بیت را نفض می کند. |
<< | Zero fill left shift | تمام بیت ها را به سمت چپ شیفت می دهد. |
>> | Signed right shift | تمام بیت ها را به سمت راست شیفت علامتدار می دهد. |
>>> | Zero fill right shift | تمام بیت ها را به سمت راست شیفت می دهد. |
مثال:
Operation | Result | Same as | Result |
---|---|---|---|
۵ & 1 | ۱ | ۰۱۰۱ & 0001 | ۰۰۰۱ |
۵ | ۱ | ۵ | ۰۱۰۱ | ۰۰۰۱ | ۰۱۰۱ |
~ ۵ | ۱۰ | ~۰۱۰۱ | ۱۰۱۰ |
۵ << 1 | ۱۰ | ۰۱۰۱ << 1 | ۱۰۱۰ |
۵ ^ ۱ | ۴ | ۰۱۰۱ ^ ۰۰۰۱ | ۰۱۰۰ |
۵ >> 1 | ۲ | ۰۱۰۱ >> 1 | ۰۰۱۰ |
۵ >>> 1 | ۲ | ۰۱۰۱ >>> 1 | ۰۰۱۰ |
جاوا اسکریپت تا ۶۴ بیت اعداد اعشاری را ذخیره می کند، اما تمام عملیات بیتی بر روی اعداد ۳۲ بیتی انجام می شود.
قبل از انجام عمل بیتی، جاوا اسکریپت اعداد را به ۳۲ بیت عدد صحیح تبدیل می کند.
پس از انجام عمل بیتی، نتیجه به اعداد ۶۴ بیتی تبدیل می شود.
مثالهای فوق از اعداد دودویی ۴ بیت بدون علامت استفاده می کنند. به همین دلیل ~ ۵ بازگشتی ۱۰ را دارد.
از آنجا که جاوا اسکریپت از ۳۲ بیت عدد صحیح استفاده می کند، مقدار ۱۰ بازگشت نخواهد شد.
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱ (۵)
۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱۰ (~ ۵ = -۶)
یک عدد صحیح علامتدار از بیت چپ به عنوان علامت منفی استفاده می کند.
هنگامی که یک AND بیتی ، بر روی یک مقدار بیتی انجام می شود، اگر هر دو بیت ۱ باشند، آنگاه ۱ را در خروجی برمی گرداند.
مثال یک بیتی:
عملیات | نتیجه |
---|---|
۰ & 0 | ۰ |
۰ & 1 | ۰ |
۱ & 0 | ۰ |
۱ & 1 | ۱ |
مثال ۴ بیتی :
عملیات | نتیجه |
---|---|
۱۱۱۱ & 0000 | ۰۰۰۰ |
۱۱۱۱ & 0001 | ۰۰۰۱ |
۱۱۱۱ & 0010 | ۰۰۱۰ |
۱۱۱۱ & 0100 | ۰۱۰۰ |
وقتی که عملگر OR روی دو مقدار بیتی انجام می شود، در صورتیکه یکی از دو بیت ۱ باشد خروجی نیز ۱ خواهد بود.
مثال یک بیتی :
عملیات | نتیجه |
---|---|
۰ | ۰ | ۰ |
۰ | ۱ | ۱ |
۱ | ۰ | ۱ |
۱ | ۱ | ۱ |
مثال ۴ بیتی :
عملیات | نتیجه |
---|---|
۱۱۱۱ | ۰۰۰۰ | ۱۱۱۱ |
۱۱۱۱ | ۰۰۰۱ | ۱۱۱۱ |
۱۱۱۱ | ۰۰۱۰ | ۱۱۱۱ |
۱۱۱۱ | ۰۱۰۰ | ۱۱۱۱ |
وقتی که عملگر XOR روی دو مقدار بیتی انجام می شود، در صورتیکه یکی از دو بیت ۱ باشد خروجی نیز ۱ خواهد بود.
مثال یک بیتی :
عملیات | نتایج |
---|---|
۰ ^ ۰ | ۰ |
۰ ^ ۱ | ۱ |
۱ ^ ۰ | ۱ |
۱ ^ ۱ | ۰ |
مثال ۴ بیتی :
عملیات | نتایج |
---|---|
۰ ^ ۰ | ۰ |
۰ ^ ۱ | ۱ |
۱ ^ ۰ | ۱ |
۱ ^ ۱ | ۰ |
اگر هر دو بیت ۱ باشند عملگر AND مقدار ۱ را بازمی گرداند، در غیر این صورت نتیجه ۰ خواهد بود.
دهدهی | باینری |
---|---|
۵ | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱ |
۱ | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱ |
۵ & 1 | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱ (۱) |
اگر یکی از بیت ها ۱ باشد آنگاه عملگر OR در نتیجه ۱ را برمی گرداند.
دهدهی | باینری |
---|---|
۵ | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱ |
۱ | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱ |
۵ | ۱ | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱ (۵) |
در عملگر بیتی XOR در صورتی که بیت ها با هم متفاوت باشند، نتیجه ۱ خواهد شد:
دهدهی | باینری |
---|---|
۵ | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱ |
۱ | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱ |
۵ ^ ۱ | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۰ (۴) |
دهدهی | باینری |
---|---|
۵ | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱ |
~۵ | ۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱۰ (-۶) |
دراین عملگر به تعداد مشخص شده ۱ یا چند بیت ۰ در سمت راست قرار گرفته و اضافه ی بیت ها از سمت چپ حذف می شوند.
دهدهی | باینری |
---|---|
۵ | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱ |
۵ << 1 | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱۰ (۱۰) |
دراین عملگر به تعداد مشخص شده از سمت چپ ترین بیت در سمت چپ کپی شده و اضافه ی بیت ها از سمت راست حذف می شوند.
دهدهی | باینری |
---|---|
-۵ | ۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱۱ |
-۵ >> 1 | ۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱ (-۳) |
دراین عملگر به تعداد مشخص شده ۱ یا چند بیت ۰ در سمت چپ قرار گرفته و اضافه ی بیت ها از سمت راست حذف می شوند:
دهدهی | باینری |
---|---|
۵ | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱ |
۵ >>> 1 | ۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰ (۲) |
اعداد دودویی تنها با یک مجموعه بیتی قابل درک است:
معادل باینری | مقدار دهدهی |
---|---|
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱ | ۱ |
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰ | ۲ |
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۰ | ۴ |
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۰۰ | ۸ |
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۰۰۰ | ۱۶ |
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۰۰۰۰ | ۳۲ |
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۰۰۰۰۰ | ۶۴ |
تنظیم چند بیت نشان دهنده الگوی باینری است:
معادل باینری | مقدار دهدهی |
---|---|
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱ | ۵ (۴ + ۱) |
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۱۰۱ | ۱۳ (۸ + ۴ + ۱) |
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱۱۰۱ | ۴۵ (۳۲ + ۸ + ۴ + ۱) |
اعداد باینری جاوا اسکریپت در فرمت مکمل دو ذخیره می شوند.
این به این معنی است که اعداد منفی NOT بیتی اعداد مثبت ۱ هستند:
معادل دو دویی | مقدار دهدهی |
---|---|
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱ | ۵ |
۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱۱ | -۵ |
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۱۰ | ۶ |
۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱۰ | -۶ |
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱۰۱۰۰۰ | ۴۰ |
۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۱۰۱۱۰۰۰ | -۴۰ |
1 2 3 | function dec2bin(dec){ return (dec >>> 0).toString(2); } |
1 2 3 | function bin2dec(bin){ return parseInt(bin, 2).toString(10); } |
عملیات بیتی و دودویی تقریبا در تمام زبان های برنامه نویسی انجام می شود و برنامه نویسان با آن به عنوان زبان کامپیوتر سر و کار دارند، جاوا اسکریپت نیز از این قاعده مستثنا نیست، از این رو مباحث این بخش را به مرور عملگرهای بیتی در جاوا اسکریپت اختصاص دادیم.
نسرین خلیفه لو
سلام
توضیحاتتون عالی و کامل بود حداقل نسبت به ۳۰ تا سایتی که من این مبحث داخلش سرچ کردم. خیلی ممنون
پی وی لرن
خوشالیم که مورد رضایت شما واقع شده است
سمانه
^ اگر هر دو مقدار یکی باشند خروجی صفر است لطفا تصحیح شود
صادق
با تشکر از تذکر شما. متن مذکور تصحیح شد