Saya suka "set" / "clear", tapi hati-hati dengan ambiguitas dalam ungkapan Anda. Seperti yang ditunjukkan Filip , "atur variabel bool" dapat diartikan dengan menuliskan beberapa nilai pada variabel. Tapi "mengatur bendera" lebih jelas.
Terminologi terkait: mengubah bilangan bulat 0 / non-nol menjadi nilai 0/1 disebut "booleanizing" .
Jika Anda benar-benar menggunakan nilai 0/1 sebagai bilangan bulat (bukan sebagai benar / salah bool
), Anda mungkin ingin menggunakan kata itu. Kalau tidak, itu mungkin hanya akan muncul jika Anda berbicara tentang biaya operasi yang harus dilakukan oleh kompiler. (Atau jika Anda melakukan vektorisasi secara manual dengan SIMD dibandingkan untuk menghasilkan bit semua-nol / semua-satu di setiap elemen vektor).
Dalam C dan C ++, a bool
secara implisit dapat mengkonversi kembali menjadi integer sebagai 0 atau 1, dan pada implementasi normal bool
disimpan sebagai nilai satu-byte yang bernilai 0 atau 1 (bukan sembarang nilai bukan nol). Memungkinkan efisien a && b
, tetapi dalam praktiknya banyak kompiler C telah melewatkan optimasi .
bool booleanize(int a) { return a; } // C++
Fungsi itu mengkompilasi ke beberapa instruksi (tidak termasuk ret
) pada sebagian besar arsitektur. (MIPS menjadi pengecualian yang menarik, memiliki instruksi pembanding-ke-register alih-alih register bendera / kode-kondisi terpisah). pada Godbolt compiler explorer untuk x86-64, MIPS, dan ARM thumb , kita dapat melihat versi x86-64 adalah:
test edi, edi # set flags according to a & a
setne al
ret # return value in AL, the low byte of RAX
Maaf contoh apa booleanisasi ini mendapat sedikit besar / di luar topik!