Giới thiệu về khai thác chút ca:
Thứ nhất, chúng tôi có các nhà điều hành trái ca, x << n
. Điều này sẽ thay đổi tất cả các bit trong x
trái bởi n
bit, điền các bit mới với zero:
1111 1111
<< 3: 1111 1000
Tiếp theo, chúng tôi đã ký kết các nhà điều hành phải thay đổi, x >> n
. Sự dịch chuyển về tất cả các bit trong x
đúng bởi n, sao chép các bit dấu vào các bit mới:
1111 1111
>> 3: 1111 1111
1000 0000
>> 3: 1111 0000
0111 1111
>> 3: 0000 1111
Cuối cùng, chúng tôi có các nhà điều hành zero-điền đúng ca, x >>> n
. Sự dịch chuyển về tất cả các bit trong x
đúng bởi n
bit, điền các bit mới với zero:
1111 1111
>>> 3: 0001 1111
Bạn cũng có thể thấy hữu ích Bitwise-hoặc nhà điều hành, x | y
.Này so sánh các bit trong mỗi vị trí trong x
và y
, thiết lập bit số điện thoại mới về nếu nó đã được trên một trong hai x
hoặc y
, ngoài khơi cách khác:
1010 0101
| 1010 1010
---------
1010 1111
Bạn chỉ nên cần các nhà khai thác trước cho vấn đề trong tầm tay , nhưng vì lợi ích của sự hoàn chỉnh, đây là cuối cùng hai:
các Bitwise-và điều hành, x & y
đặt các bit ở đầu ra để một khi và chỉ khi các bit đang bật trong cả x
và y
:
1010 0101
& 1010 1010
---------
1010 0000
Nhà điều hành Bitwise-xor, x^y
đặt các bit đầu ra để một nếu các bit đang bật trong một số hay cách khác nhưng không được cả hai:
1010 0101
^ 1010 1010
---------
0000 1111
Bây giờ, áp dụng các tình huống ở bàn tay:
Bạn sẽ cần sử dụng toán tử dịch bit để thêm và thao tác bit. Bắt đầu thiết lập các bit ở phía bên phải theo biểu diễn chuỗi của chúng và dịch chuyển chúng. Tiếp tục cho đến khi bạn nhấn vào cuối của một byte, và sau đó di chuyển đến byte tiếp theo. Giả sử chúng tôi muốn tạo biểu diễn byte là "1100 1010":
Our byte Target
--------- --------
0000 0000
1100 1010
0000 0001 ^
1100 1010
0000 0011 ^
1100 1010
0000 0110 ^
1100 1010
0000 1100 ^
1100 1010
0001 1001 ^
1100 1010
0011 0010 ^
1100 1010
0110 0101 ^
1100 1010
1100 1010 ^
Tôi sẽ, tất nhiên, hãy để bạn áp dụng điều này cho công việc của bạn.
Bạn nói về "biểu diễn nhị phân đã nén", sau đó nói rằng bạn có 'Chuỗi' dài 18 ký tự (" 010100111111011000 ") đại diện cho một từ dài 7 ký tự (" chương trình "). Bạn có chắc chắn là bạn muốn nói gì không? Thông thường bạn sẽ có những bit được thiết lập trong X số byte (3 trong trường hợp này). –
Tra cứu 'toán tử thay đổi bit': '>>', '>>>', '<<'. – Kevin
Brian, thư gốc có kích thước 56bits khi dịch sang nhị phân, thông điệp được mã hóa chỉ là 18bits. Kevin, mọi người cứ nói với tôi điều đó, nhưng tôi vẫn không thể vẽ liên kết giữa việc sử dụng những toán tử đó và có thể dịch nó thành mảng byte. –