2012-07-23 35 views
5

Biểu thức điều kiện chẳng hạn như những người liên quan đến & &||, chúng luôn đánh giá là 0 hay 1? Hoặc cho điều kiện thực, các số khác 1 có thể? Tôi hỏi vì tôi muốn gán một biến như thế này.Các biểu thức điều kiện luôn luôn đánh giá là 0 hoặc 1 trong C?

int a = cond1 && cond2; 

Tôi đã tự hỏi mình có nên làm những việc sau thay thế không.

int a = (cond1 && cond2)? 1:0; 
+0

thực sự, yêu cầu chính của bạn là gì? tại sao bạn định gán biến này? –

Trả lời

14

Các toán tử logic (&&, ||, và !) tất cả các đánh giá cho một trong hai 1 hoặc 0.

C99 §6.5.13/3:

Các && điều hành sẽ mang lại 1 nếu cả hai toán hạng của nó so sánh không công bằng để 0; nếu không, nó mang lại 0. Kết quả có loại int.

C99 §6.5.14/3:

Các || điều hành sẽ mang lại 1 nếu một trong hai toán hạng của nó so sánh không công bằng để 0; nếu không, nó mang lại 0. Kết quả có loại int.

C99 6.5.3.3/5:

Kết quả của các nhà điều hành phủ định logic !0 nếu giá trị của toán hạng của nó so sánh không công bằng để 0, 1 nếu giá trị của toán hạng của nó so sánh tương đương với 0. Kết quả có loại int. Biểu thức E tương đương với (0 == E).

+0

(Tôi không có một bản sao của C11 tiện dụng, nhưng tôi chắc chắn rằng các đặc điểm kỹ thuật của các nhà khai thác hợp lý đã không thay đổi.) –

0
'&&' 
    The logical-AND operator produces the value 1 if both operands have nonzero 
    values. If either operand is equal to 0, the result is 0. If the first operand of a 
    logical-AND operation is equal to 0, the second operand is not evaluated. 

'||' 
     The logical-OR operator performs an inclusive-OR operation on its operands. 
    The result is 0 if both operands have 0 values. If either operand has a nonzero 
    value, the result is 1. If the first operand of a logical-OR operation has a nonzero 
    value, the second operand is not evaluated. 

Các toán hạng của các biểu thức logic-AND và logic-OR được đánh giá từ trái sang phải. Nếu giá trị của toán hạng đầu tiên là đủ để xác định kết quả của phép toán, toán hạng thứ hai không được đánh giá. Điều này được gọi là "đánh giá ngắn mạch". Có một điểm chuỗi sau toán hạng đầu tiên.

Xin cảm ơn, :)

+2

Và điều này không trả lời câu hỏi. –

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