Dòng "x-= z==o;" có ý nghĩa gì?

Em chào mọi người. Em có dòng code sau đây, mọi người cho em hỏi dòng x-= z==o; có nghĩa là sao vậy ạ? Em cảm ơn ạ.

int main(){
	ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n,o,z;
    cin >> n;
    string s;
    while (n--){
        cin>> s;
        o=count(s.begin(),s.end(),'1');
        z=count(s.begin(),s.end(),'0');
        int x=min(o,z);
        x-= z==o;
        cout << x<<endl;
    }
	return 0;
}

phân tích cú pháp từng token ra thôi.
x là ?
-= là ?
z là ?
== là ?
o là ?
; là ?

z == o cho ra kết quả ? (1)
x -= kết quả (1) thì ra ?

kết hợp lại ta có ý nghĩa của dòng code

6 Likes

Thứ tự ưu tiên toán tử https://en.cppreference.com/w/cpp/language/operator_precedence (để ý chỗ bậc 5 6 quen thuộc)
Nhóm theo bậc cao trước.

5 Likes

Gợi ý nhỏ:

bool a = x == y; // a mang kết quả là true hoặc false
int b = x == y;  // b mang kết quả là: 1 hoặc 0 (true được ép kiểu ngầm định* sang 1, false => 0)

*Ép kiểu ngầm định: https://en.cppreference.com/w/cpp/language/implicit_conversion

3 Likes

Em cảm ơn, đọc đến cmt của bác em mới hiểu ^-^

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?