Tôi có một macro mà trông giống như sau:"Bitwise Và" và trái Padding trong C++
Foo(x) ((x - '!') & 070)
Nếu tôi gọi đoạn mã sau:
Foo('1') => 16
Tuy nhiên, nếu tôi gọi là mã sau:
(('1' - '!') & 70) => 0
Vì vậy, câu hỏi của tôi là, những gì đang xảy ra ở đây? Tại sao x & 070
tính cho x
nhưng x & 70
tính cho 0?
Đoán của tôi là số 0 thừa ở bên trái đang buộc 60 phải lấy 2 byte thay vì 1. Trong trường hợp đó, không phải bitwise & như sau?
0000 0000 0001 0000 '16
0000 0000 0100 0110 & '70
-------------------
0000 0000 0000 0000
Tôi biết câu trả lời này (0 tiền tố = hằng số bát phân) nhưng tôi có thể thành thật mà nói trong hơn 20 năm lập trình C, tôi chưa bao giờ thấy nó được sử dụng. Nó chỉ là một trong những thứ mà dường như có nguồn gốc từ một thời điểm khi nó sẽ hữu ích, có thể là một cái gì đó để làm với máy teletype hoặc bất cứ điều gì. Là một người nhúng, tôi luôn miffed rằng không có cái gì giống như một tiền tố 'b' cho hằng số nhị phân (có, tôi có cách riêng của tôi làm điều này trong C & C++, quá xấu nó không được xây dựng vào ngôn ngữ). – Dan