2010-07-22 44 views
5

Nhà điều hành dưới đây là gì ^? Khi nào sử dụng?Khi nào sử dụng toán tử "^"

Ngôn ngữ lập trình của tôi là C#.

+3

Google hoặc MSDN trong trường hợp này, là bạn của bạn: http://msdn.microsoft.com/en-us/library/zkacc7k1%28VS.71%29.aspx Để trả lời câu hỏi thứ 2 của bạn, bạn sử dụng toán tử khi cần nó, giống như ví dụ toán tử '+'. – stakx

+0

Google không phải là câu trả lời, MSDN, tuy nhiên, là http://meta.stackexchange.com/questions/8724/how-to-deal-with-google-questions – Bobby

+6

Nếu anh ta không biết những gì anh ta đang tìm kiếm, Googling có thể khó khăn, đặc biệt là kể từ khi Google thậm chí không nhận ra^nhân vật. Thêm vào đó, anh ta cũng muốn biết "khi nào sử dụng nó" một cái gì đó không có nơi nào có thể trả lời tốt hơn StackOverflow –

Trả lời

9

^ là một logic XOR hành nếu toán hạng là bools, nếu không nó là một Bitwise XOR hành

Binary^nhà khai thác đang được xác định trước cho các loại không thể thiếu và bool. Đối với các kiểu tích phân,^tính toán OR độc quyền bit của các toán hạng của nó. Đối với toán hạng bool,^tính toán các toán hạng logic hoặc độc quyền của nó; có nghĩa là, kết quả là đúng nếu và chỉ khi chính xác một trong các toán hạng của nó là đúng.

http://msdn.microsoft.com/en-us/library/zkacc7k1.aspx

+4

"Toán tử XOR logic". - Điều đó chỉ đúng nếu các toán hạng là bool, nếu không thì đó là toán tử bitwise. Chơi nhanh và lỏng với các thuật ngữ 'bitwise' và 'logical' làm cho cuộc sống trở nên khó khăn khi bạn đến để giải thích sự khác biệt giữa & và && trong 'C' ... –

+0

@Will Dean: Cảm ơn bạn đã làm rõ. – sshow

3

Đó là các nhà điều hành XOR. Nó được sử dụng trong các hoạt động bitwise, trong đó kết quả là đúng nếu bên trái là đúng hoặc bên phải là đúng, nhưng sai nếu cả hai là đúng hoặc cả hai là sai. Vì vậy, 0xf8^0x3f sẽ là:

1111 1000 
0011 1111 
--------- 
1100 0111 

Đó là C7 trong hệ thập lục phân.

Nói chung, nếu bạn không làm số học bitwise, bạn sẽ không cần phải lo lắng về nó.

+0

Bạn quên thêm rằng nó cũng sai nếu CẢ là sai. –

0

tôi nghĩ về nó như một nhà điều hành nhị phân giống như ||, & &, vv ...

Nếu tôi được viết logic và kết thúc với:

if((condition1 && !condition2) || (condition2 && !condition1)) 
{ 
} 

tôi có thể viết lại nó như là :

if(condition1^condition2) 
{ 
} 

Điều đó nói rằng, tôi sẽ thực hiện theo từng trường hợp và cân nhắc lợi ích của ngắn gọn so với tiềm ẩn do sự tối tăm tương đối.

0

Toán tử OR (XOR) độc quyền của nó như được người khác đề cập. Đây là bảng chân lý cho XOR

P Q P^Q 
T T  F 
T F  T 
F T  T 
F F  F 

Lưu ý rằng P^Q bằng P! = Q. Đôi khi P! = Q được sử dụng trong mã thay vì toán tử XOR.

1
  • Nó thường được sử dụng như một cách để "lật bit" bởi XORing nó với 1 (để lật), 0 (giữ). Thông thường, điều này hữu ích trong mã hóa/giải mã/băm.** Đây là thực sự hữu ích **

Ví dụ:

101^ 
110 
----- 
011 //Flip the first 2, keep the 3rd 
  • Nó cũng có thể được sử dụng cho một phương pháp trao đổi (tuy nhiên, bằng cách sử dụng tiêu chuẩn cách và Generics có lẽ là nhiều hơn lý tưởng) :

Ví dụ:

int myMoney = 10; 
int yourMoney = 50; 
Swap(myMoney, yourMoney) 

public void Swap(ref int a, ref int b) //No 'temp' variable necessary 
{ 
    a ^= b; 
    b ^= a; 
    a ^= b; 
} 
  • Nó được sử dụng trong số học nhị phân. ** Đây là thực sự hữu ích **

  • Lật một bool (mặc dù, tôi muốn sử dụng bool x = true; x = x;

Ví dụ:

public bool flip(ref bool b) 
{ 
    b ^= true; 
} 
Các vấn đề liên quan