2012-06-08 40 views
8

[Có vẻ như kỳ lạ này không tồn tại, vì vậy lời xin lỗi trước nếu đó là một bản sao]bình đẳng logic trong C

Tôi muốn thử nghiệm cho sự bình đẳng logic trong C. Nói cách khác, tôi muốn biết liệu hai các giá trị sẽ bằng nhau nếu cả hai được chuyển đổi theo cách thông thường được kết hợp với các biểu thức logic.

Trong C99, tôi nghĩ rằng

(bool)a == (bool)b 

cho những gì tôi muốn. Đúng không? Cách viết thông thường trong C truyền thống là gì?

+2

Đồng bằng truyền thống C không có loại bool. –

+4

err, guys? bạn đọc q? tôi biết truyền thống C không có bool. đó là lý do tại sao tôi hỏi làm thế nào bạn sẽ viết rằng trong truyền thống C. cũng, Als, '==' sẽ trả về false cho '1 == 2', mà không phải là những gì tôi muốn. –

Trả lời

10

Bạn thường thấy điều này:

if ((a == 0) == (b == 0)) 

Hoặc

if (!!a == !!b) 

Kể từ !!a đánh giá đến 1 nếu a là khác không và 0 nếu ngược lại.

Hy vọng điều này sẽ hữu ích!

1

Không có (bool) trong truyền thống c. True/False được xử lý bằng cách sử dụng int s. Bạn có thể kiểm tra sự bình đẳng boolean với

a ? b : !b 
+1

có một bool trong C99. –

+0

Đã có một 'bool' trong 13 năm qua ... –

+0

Tôi có nghĩa là c truyền thống, không phải là c99. –

6

Trong C, số không là false. Nếu bạn muốn chuyển đổi bất kỳ giá trị nào sang giá trị boolean tương đương, cách tiêu chuẩn (tốt, ngoại trừ việc gần như không bao giờ cần đến nó) là tiền tố một biểu thức với !!, như trong !!a. Trong trường hợp biểu hiện của bạn, !!a == !!b có thể được đơn giản hóa để !a == !b

+0

khi * là * có cần thiết không? –

+0

Khi a và b có thể có các giá trị khác 0, và bạn muốn biết liệu chúng có đánh giá cùng một boolean trong một phép kiểm tra luồng kiểm soát tiếp theo, chẳng hạn như 'if()'. –

+0

oh, xin lỗi, đã đọc câu trả lời gốc của bạn. –

2

trong pre-C99 C, tradiitional, cách thành ngữ để "dàn diễn viên đến bool" là với !!.

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