2009-04-30 28 views
6

Something bất kỳ thứ hai trong CS nên có thể trả lời, nhưng tôi dường như không thể quấn quanh đầu tôi nó ...Thay thế một loạt chút

Tôi có một tập hợp các bit, và tôi cần phải thay thế một số của các bit với một tập hợp khác. Trong một ví dụ đơn giản:

10101010 chút Bản gốc thiết

00001111 -mask vị trí thay thế cho thấy

00001100 -new chút giá trị

10101100 -resulting chút thiết

Một ví dụ khác:

10101010 -bộ bit gốc

00.110.011 -mask

11111111 chút -new giá trị

10111011 -resulting chút thiết

Đó là tầm thường để làm điều này bằng cách duyệt qua các bit.

Có thể thực hiện điều này bằng cách sử dụng logic boolean (AND, OR, v.v.) không?

Trả lời

10
result = (original & ~mask) | (newbits & mask) 

Phần "& ~ mặt nạ" đảm bảo xóa các bit đó thành 0 trước | phần.

Phần "& mặt nạ" đảm bảo chỉ sử dụng các bit thích hợp trong bộ mới.

+0

Điều đó có, cảm ơn. –

0

Mặt nạ ra các bit được thay thế ra khỏi bản gốc (bằng cách AND với NOT của mặt nạ), sau đó đặt các bit mới vào (qua OR).

10101010 chút Bản gốc thiết

00001111 -mask cho thấy vị trí thay thế

00001100 chút -new các giá trị

11110000 -negated mặt nạ

10100000 bitset Bản gốc đeo mặt nạ

10101100 -nút mới được đặt lại trong


In (++) mã C, nó sẽ là:

ra = (trong & ~ mask) | newbits;

Nếu các bit mới chứa bit bên ngoài những gì chúng được cho là thay thế, VÀ chúng cũng có mặt nạ.

1

(MỚI và MASK) HOẶC (OLD và KHÔNG MASK)

Các vấn đề liên quan