مسیر
/
Java
Java
/
برنامه‌ی درسی
/
دستکاری بیت
دس

دستکاری بیت در Java

3 تمرین

درباره‌ی دستکاری بیت

Java برای دستکاری بیت‌های یک نوع صحیح (یعنی byte، short، int، long یا char) عملگرهایی دارد.

عملگرهای جابه‌جایی

برای جابه‌جایی بیت‌ها به چپ از << و برای جابه‌جایی به راست از >> استفاده کنید.

// Shift two places to the left
0b0000_1011 << 2;
// # => 0b0010_1100

// Shift two places to the right
0b0000_1011 >> 2;
// # => 0b0000_0010

>> را جابه‌جایی علامت‌دار یا حسابی هم می‌نامند، چون بیتی که درج می‌کند همان بیت علامت است. این بیت، چپ‌ترین بیت است و اگر مقدار مثبت باشد ۰ و اگر منفی باشد ۱ است. جابه‌جایی به چپ با << همیشه در سمت راست صفر درج می‌کند.

// Shift 2 places to the right preserves the sign
// The binary value is two's complement of 0b0000_0110 (or 0x00000026), so the binary representation will be
// 1000_0000_0000_0000_0000_0000_0010_0110
int value = -0x7FFFFFDA;

// Shift two places to the right, preserving the sign bit
value >> 2;
// # => 1110_0000_0000_0000_0000_0000_0000_1001

وقتی هنگام جابه‌جایی به راست می‌خواهید صفر درج شود، به‌جای آن از >>> استفاده کنید. درج صفر هنگام جابه‌جایی را جابه‌جایی منطقی هم می‌نامند.

// Shift two places to the right, inserting 0s on the left
value >>> 2;
// # => 0010_0000_0000_0000_0000_0000_0000_1001

عملگرهای بیتی

AND بیتی

عملگر AND بیتی (&) دو مقدار می‌گیرد و روی هر بیت یک عملیات AND انجام می‌دهد. هر بیت از مقدار اول را با بیتِ همان جایگاه در مقدار دوم مقایسه می‌کند. اگر هر دو ۱ باشند، بیت نتیجه ۱ می‌شود. در غیر این صورت، بیت نتیجه ۰ است.

0b0110_0101 & 0b0011_1100;
// # => 0b0010_0100

OR بیتی

عملگر OR بیتی (|) دو مقدار می‌گیرد و روی هر بیت یک عملیات OR انجام می‌دهد. هر بیت از مقدار اول را با بیتِ همان جایگاه در مقدار دوم مقایسه می‌کند. اگر یکی از آن دو ۱ باشد، بیت نتیجه ۱ می‌شود. در غیر این صورت، ۰ است.

0b0110_0101 | 0b0011_1100;
// # => 0b0111_1101

XOR بیتی

عملگر XOR بیتی (^) روی دو مقدار یک XOR بیتی انجام می‌دهد. مثل عملگرهای AND بیتی و OR بیتی، هر بیت از مقدار اول را با بیتِ همان جایگاه در مقدار دوم مقایسه می‌کند. اگر فقط یکی از آن دو ۱ باشد، بیت حاصل ۱ می‌شود. در غیر این صورت، ۰ است.

0b0110_0101 ^ 0b0011_1100;
// # => 0b0101_1001

NOT بیتی(~)

در آخر، عملگر NOT بیتی (~) هر بیت را وارونه می‌کند. برخلاف عملگرهای قبلی، این یک عملگر یکانی است و فقط روی یک مقدار عمل می‌کند.

~0b0110_0101;
// # => 0b1001_1010
ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

دستکاری بیت را یاد بگیرید