01/10/2018, 12:04

Cho em hỏi về chức năng của hàm GetBit này

Cho hỏi câu lệnh return cụ thể trong hàm này nó có chức năng gì vây ạ

bool GetBit(char x, char i)
{
	return (bool)((x >> 7 - i) & 1);
}
Văn Dương viết 14:06 ngày 01/10/2018

Kiểm tra bit thứ i trong byte x là 1 hay 0.

Trả về true nếu là 1, trả về false nếu là 0.

明玉 viết 14:19 ngày 01/10/2018

Hàm này lấy bit thứ i, từ 0 tới 7, từ highest bit tới lowest bit của x.
Phép trừ trc, sau đó phép dịch bit, cuối là phép AND bit.
Bit cần lấy đc dịch về phải, trở thành lowest bit, AND bit với 1 để zero các bit kia đi (ngoại trừ lowest bit), thế là có bit cần lấy.

Sửa title cho bạn luôn.

long viết 14:06 ngày 01/10/2018

Mình không hiểu kiểu return(kiểu tra về bool) () là sao nhỉ,chỉ biết return x; trả về cho hàm giá trị của x thôi.Bạn có thể giải thích rỏ cái này giúp được k ạ

明玉 viết 14:19 ngày 01/10/2018

Ko, nó return giá trị biểu thức mà có tham số là x và i, chứ ko phải return x. Biểu thức thì mình giải thích ở trên.
Tác giả hàm này chắc thích viết thế (là hint ám chỉ ý định chỉ có hoặc là 0 hoặc là 1), bạn đổi sang kiểu int cũng đc.

long viết 14:20 ngày 01/10/2018

Tức là nó return bieu thuc này đúng ko ạ “((x >> 7 - i) & 1)”
Vậy (bool) trước biểu thức đó làm gì vậy ạ.

rogp10 viết 14:11 ngày 01/10/2018

Vì kiểu trả về là bool.

Khi đã & 1 thì chỉ có hai kết quả là 0 hay 1, nên phù hợp với bool.

明玉 viết 14:20 ngày 01/10/2018

C/C++ có type casting, mấy bác vn dịch nôm na là “ép kiểu”.

long viết 14:06 ngày 01/10/2018

Vậy mình có cần thiết phải ép kiểu về bool không vậy.Bởi vì trước sau gì thì biểu thức đó cũng trả về 0 hoặc 1 thôi mà nhỉ.

明玉 viết 14:12 ngày 01/10/2018

Ko cần ép kiểu, viết thế để “hint” thôi. Nếu thuật toán sai thì ép kiểu cũng ko ích gì.

long viết 14:15 ngày 01/10/2018

Thank các bạn đả thông não mình.

rogp10 viết 14:12 ngày 01/10/2018

Đúng vậy, chỉ nên dùng bool với các hàm kiểm tra thôi. Chứ những hàm Get trả về kiểu trùng với thứ mà nó get.

Bài liên quan
0