2016-02-16 16 views
8

Tôi đã tìm kiếm tiêu chuẩn nhưng không nhận thấy phần được đề cập.! 0 được đảm bảo là 1 trong C89?

Chỉ là "bất kỳ thứ gì trừ 0" và 1 hoặc nó phụ thuộc vào trình biên dịch?

+3

Toán tử tích hợp mang lại kết quả logic Boolean ('<', '>', '<=', '> =', '==', '! =', '&&', '||', '!') Luôn mang lại chính xác '0' hoặc' 1', thuộc loại 'int'. Một số hàm thư viện nhất định, như 'isdigit()', trả về '0' cho giá trị false hoặc bất kỳ giá trị khác không đúng. –

Trả lời

23

Kết quả của các nhà điều hành phủ định logic ! là 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 bằng 0. Kết quả có kiểu int.

Xuất hiện trong C89/C90, C99 và C11.

+2

Bạn có thể thêm vào liên kết cho nơi bạn tìm thấy điều này không? – AustinWBryan

+1

http://port70.net/~nsz/c/c89/c89-draft.html#3.3.3.3 –

+0

Cảm ơn bạn rất nhiều! – susdu

4

Khi các hobbs nói trong câu trả lời của mình, section 6.5.3.3.5 of the C standard quy định rằng !0 đánh giá là 1.

Ngoài ra, hành vi này có thể được sử dụng để chuẩn hóa một số nguyên thành giá trị boolean (tức là 0 hoặc 1) với biểu thức !!x.

  • Khi x = 0, !!x = !!0 = !1 = 0.
  • Khi x! = 0, !x = 0, vì vậy !!x = !0 = 1.
Các vấn đề liên quan