2011-12-23 30 views
34

Có phải !!(x) được đảm bảo theo tiêu chuẩn để trả lại 0/1 không?đôi phủ định trong C: là nó đảm bảo để trở về 0/1?

Lưu ý rằng tôi là không phải là hỏi về C++, trong đó một loại bool được xác định.

+1

Tiêu chuẩn nào? –

+0

@DanFego: Nó có hành vi được xác định rõ ràng vì C được chuẩn hóa đầu tiên, vì vậy tiêu chuẩn không quan trọng. – jamesdlin

+1

có thể trùng lặp của [Cái gì! 0 trong C?] (Http://stackoverflow.com/questions/3661751/what-is-0-in-c) – jamesdlin

Trả lời

42

Có, trong C99, xem §6.5.3.3/4:

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

Vì vậy, !x!!y chỉ có thể mang lại 0 hoặc 1, là int s.

Đối với các nhà khai thác khác, C99, xem thêm Is the "true" result of >, <, !, &&, || or == defined?

+1

cảm ơn. chỉ khi bạn tò mò tại sao: Tôi đang sử dụng nó cho cạnh tranh uni, nơi mã của tôi sẽ chạy mà không tối ưu hóa gcc, tôi tìm thấy bằng cách sử dụng '!! x' giảm thời gian mã của tôi xuống ~ 5% rồi' x = (x? 1: 0) '. Dù sao, cảm ơn cho báo giá của tiêu chuẩn, nó đã rất hữu ích. – amit

14

Đây là một bình luận thực sự, nhưng nó quá dài. (Xin vui lòng không bỏ phiếu trên cơ sở đó một mình.)

Tôi tìm thấy một tài liệu rất kì lạ khi tìm kiếm tiêu chuẩn để trả lời câu hỏi của bạn: The New C Standard: An Economic and Cultural Commentary. Và họ nói rằng học viện không được tài trợ. (Here là đầy đủ, 2083 trang 10.5MB PDF. Liên kết cũ chỉ là phần phủ định kép.)

Có điều này để nói về chủ đề phủ định kép: "Một tiêu cực kép thường được hiểu là một tuyên bố tích cực bằng tiếng Anh (vd: "Không rõ hai âm bản xuất hiện trong nguồn C") Các ngữ nghĩa tương tự áp dụng trong C. Tuy nhiên, trong một số ngôn ngữ (ví dụ, tiếng Tây Ban Nha) tiêu cực hơn (cách sử dụng này xảy ra trong bài phát biểu bằng tiếng Anh thông thường, ví dụ như “bạn chưa thấy gì cả”, nhưng nó hiếm và cau mày trên xã hội 1). ”

Tôi tin rằng tác giả sẽ rất vui khi biết rằng điều này là không sử dụng bất cứ điều gì trong việc trả lời câu hỏi thực của bạn (câu trả lời là có.)

+0

Xin vui lòng upvote anh chàng này cho các nỗ lực nghiên cứu! –

+1

tiêu chí bỏ phiếu là tính hữu dụng và câu trả lời này, như bạn đã nói, 'không được sử dụng bất cứ cái gì'. –

+2

@PeteKirkham, tôi trân trọng không đồng ý, cũng như các câu hỏi thường gặp: * "Sử dụng downvotes của bạn bất cứ khi nào bạn gặp phải một bài đăng cẩu thả, không tốn công sức, hoặc câu trả lời rõ ràng và có thể là không chính xác." * Dù sao, Giáng sinh vui vẻ và chúc mừng năm mới. –

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