2012-09-24 40 views
5

Thứ tự đánh giá bằng C trong trường hợp x<<y>>z là gì? Có phải là (x<<y)>>z, vì sự kết hợp từ trái sang phải không?x <<y>> z thứ tự đánh giá trong C

CHỈNH SỬA Cần biết tiêu chuẩn nói gì và không đoán điều gì đang xảy ra do kiểm tra đối với một trình biên dịch cụ thể.

+6

bạn đã thử nó? Những gì bạn có? –

+0

@AurelioDeRosa: Đã thử tại đây: http://msdn.microsoft.com/en-us/library/2bxt6kc4.aspx. Nhưng tôi đã nhầm lẫn với dòng: "Thứ tự của các hoạt động không được xác định bởi ngôn ngữ" – phoxis

+4

@AurelioDeRosa: Ngay cả khi bạn thử nó, làm thế nào để bạn biết/chứng minh rằng trình biên dịch của bạn là tuân thủ tiêu chuẩn? –

Trả lời

3

Online C 2011 Draft Standard (N1570)

 
6.5.7 Bitwise shift operators 

Syntax 

1  shift-expression: 
      additive-expression 
      shift-expression << additive-expression 
      shift-expression >> additive-expression 

Cú pháp chỉ ra cả hai nhà khai thác đang trái kết hợp, như sau:

 
    x  <<  y   >>   z 
    |    |   |   | 
    +------ + ------+   |   | 
      |     |   | 
      V     |   V 
     shift-expression  >> additive-expression 

+1

+1 cho BNF . –

5

Có, >><< là liên kết trái và có cùng mức ưu tiên, vì vậy x <<y>> z tương đương với (x << y) >> z.

-1

Đúng vậy, nhưng tôi nghĩ rằng nó an toàn hơn để thực hiện trong 2 bước, như x<<y sau đó y>>z khiến trình biên dịch có thể diễn giải kém là x<<y>>z. Tôi đã không sử dụng bitwise hoạt động kể từ một thời gian toàn bộ nhưng nếu tôi nhớ cũng là những gì tôi nói. Tôi hy vọng tôi đã giúp bạn.

+0

Cảm ơn bạn đã chỉnh sửa, không thấy lỗi của tôi. Xin lỗi cho OP. –

+0

trình biên dịch không thể diễn giải nó xấu (gần 0 cơ hội cho một lỗi, thứ tự đánh giá là một điều thực sự cơ bản) –

+0

Tôi đã nhìn thấy sai lầm đó (không biết những gì đã đi qua bộ não của tôi) –

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