2010-03-09 33 views
30

cách thanh lịch nhất để làm những thứ tiếp theo là gì:cách thanh lịch nhất để thay đổi 0-1 và ngược lại

int i = oneOrZero; 

if (i == 0) { 
    i = 1; 
} else { 
    i = 0; 
} 

Bạn có thể giả định rằng i có thể chỉ có 1 hoặc 0 giá trị.

+1

doanh nghiệp OneOrZero này được sử dụng để làm gì? Tôi thấy bạn làm cho các lập trình viên khẳng định rằng tôi chỉ là 1 hoặc 0, nhưng đó không phải là trình biên dịch được thi hành. Tại sao không sử dụng boolean hoặc enum? – Carl

+0

@Carl: bởi vì nó là số nguyên – Roman

+1

Hãy để tôi làm rõ: Tại sao bạn sử dụng một int cho (1) cái gì đó chỉ có hai giá trị (mà không được thực thi bởi kiểu số nguyên) và (2) cái gì đó có giá trị của nó lộn? – Carl

Trả lời

88

i ^= 1;

XOR giá trị với 1. Điều này cho phép bạn cả hai cách (trong trường hợp bạn cần phải lật 0 <--> 1 một trong hai cách):

0^1 = 1 
1^1 = 0 
+2

Điều này không chỉ ngắn hơn, nhưng với tôi mang ý nghĩa tốt hơn một chút so với câu trả lời trừ. –

+1

Điều này làm việc trong Python cũng như – Gourneau

64

phép trừ?

i = 1 - i; 
+0

đẹp. Tôi nghĩ về các hoạt động nhị phân và không nhìn vào các giải pháp đơn giản hơn. – Roman

+0

Đợi ... mà đến từ một nhà toán học;) – AraK

+1

Câu hỏi thực sự là, bạn sẽ thêm một bình luận nói "lật giá trị của tôi" hay chỉ để nó một mình? –

2

i = (i == 0)?1:0 là một cách, mặc dù tôi thích Các phiên bản của @ Jimmy và @ Yuval tốt hơn.

+1

Tôi thích cái này như khi tôi đọc mã tôi biết chính xác những gì nó phải làm. Phép trừ là quá thông minh cho điều đó, XOR không phải là phổ biến của một hoạt động mà tôi sẽ nhận ra nó ngay lập tức. –

+0

@Frank Schwieterman: Theo kinh nghiệm của tôi,? nhà điều hành cũng không phổ biến. Nếu bạn chưa bao giờ thấy? nhà điều hành, nó không rõ ràng những gì đang xảy ra. Tôi muốn đi với XOR (và có thể bình luận nó). – GreenMatt

+0

Điểm tốt của Hmm. Từ quan điểm của tôi, tôi sẽ nhận ra? trước ^, nhưng tôi cho rằng điều đó không phổ biến. –

2

Sử dụng chút xor

i ^= 1;

4

i = (i + 1) % 2, mặc dù tôi nghĩ rằng tất cả chúng tôi đồng ý các phép trừ hoặc xor phương pháp là tốt hơn! (Mặc dù nó có lợi ích bổ sung là "lật công tắc" nhiều hơn nhị phân.)

1
int x = 0; 
x=(int)Math.cos(x); 
System.out.println("X value "+x); 
Các vấn đề liên quan