Vì vậy, tôi thấy rằng câu hỏi này đã được hỏi, tuy nhiên câu trả lời có chút mơ hồ và vô ích. Ok, tôi cần triển khai biểu thức c chỉ sử dụng "&^~! + | >> < "Tuyên bố có điều kiện sử dụng toán tử bitwise
Biểu thức cần giống: a? b: c
Vì vậy, từ những gì tôi đã có thể nói, khái niệm cần phải giống như thế:
return (a & b) | (~a & c)
này hoạt động khi a = 0, vì anding nó với b sẽ cung cấp cho không, và sau đó biểu thức hoặc sẽ trả về phía bên phải, (~a & c)
hoạt động vì ~ 0 cung cấp tất cả những cái, và anding c với tất cả đều trả về c.
Tuy nhiên, điều này không hoạt động khi có> 0. Ai đó có thể cố gắng giải thích tại sao điều này xảy ra hoặc cách khắc phục?
Điều này thực sự hoàn hảo. Vì vậy, tại sao thêm một làm cho tất cả các bit thiết lập hoặc rõ ràng? Tôi hiểu tại sao điều đó lại xảy ra, nhưng tôi không hiểu điều đó xảy ra như thế nào. – atb
Nếu chúng ta bắt đầu với 0, sau đó lật các bit cho tất cả các bit. Khi chúng ta thêm một, tất cả những người quay trở lại số không (và mang được thiết lập, nhưng chúng tôi bỏ qua nó). Nếu chúng ta bắt đầu với 1, lật các bit cho 111 ... 10. Thêm 1 lượt mà cuối cùng 0 đến 1, vì vậy tất cả các bit bây giờ là 1. –
phần 'y = ~ x + 1' khiến tôi bối rối; Tôi cuối cùng đã tìm ra nó hoạt động do tràn số nguyên trong trường hợp khi x = 0, nhưng nó không rõ ràng. Giải pháp rõ ràng hơn cho tôi trước tiên là chuyển từ lsb sang msb bằng shift trái (00000001 => 10000000) và sau đó sao chép msb với shift phải: 'y = (x << 31) >> 31' –