Tôi có đoạn code sau đây và tôi không thể hiểu được ý nghĩa của nó:Hoạt động "| =" có nghĩa là gì trong C++?
var1 |= var2>0 ? 1 : 2;
Bất cứ ai có thể giúp tôi xin vui lòng!
Tôi có đoạn code sau đây và tôi không thể hiểu được ý nghĩa của nó:Hoạt động "| =" có nghĩa là gì trong C++?
var1 |= var2>0 ? 1 : 2;
Bất cứ ai có thể giúp tôi xin vui lòng!
if (var2 > 0)
var1 = var1 | 1;
else
var1 = var1 | 2;
Đó là Bitwise-hoặc.
Tất cả các nhà điều hành a op= b
là lối tắt đến a = a op b
.
Tuy nhiên, vì C++ cho phép op
và op=
được ghi đè riêng biệt, bạn dựa vào từng người triển khai loại tùy chỉnh để nhất quán.
Tôi cho rằng bất kỳ ai thực hiện nhiệm vụ khác trong '@' và '@ =': s –
@Matthieu: C++ là (và, IMO, sẽ luôn là một ngôn ngữ cung cấp cho bạn nhiều sợi dây để treo mình. – Richard
Tôi không biết ai thực hiện chúng để có hành vi khác nhau (ngoại trừ việc phân công hợp chất rõ ràng thay đổi toán hạng bên trái của nó). Nhưng việc triển khai thực hiện mà không có người khác thì khá phổ biến, ví dụ: iostreams chèn khai thác. –
Nhà điều hành | = nghĩa Chuyển nhượng bởi Bitwise OR
Như những người khác đã nói nó là viết tắt của v1 = v1 | v2;
sử dụng khác bạn có thể gặp là với các phép toán luận.
Given:
bool b = /*some value*/
Thay vì nói:
if(a)
b = true;
bạn có thể thấy:
b |= a;
cond ? x : y
lợi nhuận x
if cond là đúng và y
khác. Đọc Ternary Operator
a |= b
là viết tắt cho a = a | b
được gán a | b
để a
a | b
là bitwise OR của a
và b
. (ví dụ: 2 | 3 = 3 và 1 | 2 = 3)
2 | 3 = 3, phải không? – Cowan
@Cowan: cảm ơn và cập nhật. –
Như những người khác trước tôi đã đề cập, điều đó có nghĩa là bạn sẽ kết thúc với các bài tập theo bitwise HOẶC.
Bitwise HOẶC có thể được minh họa bằng cách sử dụng các mẫu bit bên tay trái và bên phải và đặt chúng ở trên cùng của mỗi phần.
Trong mỗi cột: 0 + 0 cho 0, 1 + 0 cho 1, 0 + 1 cho 1, 1 + 1 cho 1.
Trong ngữ cảnh của booleans: false OR false == false, true HOẶC false == true, false OR true == true, true OR true == true.
Dưới đây là một ví dụ về Bitwise OR và các bit mô hình kết quả: var1 (11) | = var2 (14) -> var1 (15)
1011 (11) OR 1110 (14) = 1111 (15)
Số nguyên có thể được biểu diễn ở dạng nhị phân, do đó mỗi chữ số (bit, chuyển đổi) là 1 (trên) hoặc 0 (off):
00000000 == 0
00000001 == 1
00000010 == 2
00000011 == 3
00000100 == 4
00001000 == 8
00010000 == 16
Bitwise OR kết hợp hai số bằng cách "sáp nhập" hai bộ bit:
First number: 00110000
Second number: 00000010
Result: 00110010
Nếu bit là 1 trong EITHER của số đầu vào, sau đó nó sẽ là 1 trong kết quả.
Hãy so sánh với bitwise AND, mà tìm "chồng chéo" của hai bộ bit:
First number: 00110100
Second number: 10011110
Result: 00010100
Nếu một bit là 1 trong CẢ các số đầu vào, sau đó nó sẽ là 1 trong kết quả.
Nếu các con số trong các biến a, b, bạn có thể đặt các Bitwise OR/AND kết quả vào một biến c mới:
unsigned int c = a | b; // OR
unsigned int c = a & b; // AND
Thông thường kết quả cần được đặt vào một trong hai biến , tức là
unsigned int c = a | b; // OR
c = a; // copy
vì vậy, như một cách viết tắt, bạn có thể làm điều này trong một bước duy nhất:
a |= b; // merge b directly into a
trong CS, nó được gọi là một "com chuyển nhượng bảng Anh ". –
Bạn nên đọc ngôn ngữ. – starblue
FYI, điều này cũng có thể thực hiện được trong Java, ví dụ: 'int var1, var2'. – polygenelubricants