Tôi thích "thiết lập" / "rõ ràng", nhưng hãy cẩn thận với sự mơ hồ trong cách diễn đạt của bạn. Như Filip chỉ ra , "đặt biến bool" có thể được dùng để viết một số giá trị cho biến. Nhưng "dựng cờ" thì rõ ràng hơn.
Thuật ngữ liên quan: biến số nguyên 0 / khác không thành giá trị 0/1 được gọi là "booleanizing" .
Nếu bạn thực sự sử dụng giá trị 0/1 làm số nguyên (thay vì là đúng / sai bool
), bạn có thể muốn sử dụng từ đó. Nếu không, nó có thể sẽ chỉ xuất hiện nếu bạn nói về chi phí của các hoạt động mà trình biên dịch phải thực hiện. (Hoặc nếu bạn đang vectơ thủ công với SIMD so sánh để tạo ra các bit all-zero / all-one trong mỗi phần tử vector).
Trong C và C ++, a bool
có thể chuyển đổi hoàn toàn thành số nguyên dưới dạng 0 hoặc 1 và trên các triển khai bình thường bool
được lưu trữ dưới dạng giá trị một byte là 0 hoặc 1 (không chỉ là giá trị khác không). Cho phép hiệu quả a && b
, nhưng trong thực tế, nhiều trình biên dịch C đã bỏ lỡ tối ưu hóa .
bool booleanize(int a) { return a; } // C++
Hàm đó biên dịch thành nhiều hướng dẫn (không bao gồm ret
) trên hầu hết các kiến trúc. (MIPS là một ngoại lệ thú vị, có các hướng dẫn so sánh đăng ký thay vì đăng ký cờ / mã điều kiện riêng biệt). trên trình khám phá trình biên dịch Godbolt cho x86-64, MIPS và ARM , chúng ta có thể thấy phiên bản x86-64 là:
test edi, edi # set flags according to a & a
setne al
ret # return value in AL, the low byte of RAX
Xin lỗi ví dụ này về những gì booleanizing có một chút lớn / lạc đề!