01/10/2018, 00:59

Hàm này làm gì ? Và bỏ đi chi tiết có sao không?

Cho em hỏi là tại sao trong vòng lặp for nó chỉ ghi biến b rồi chấm phẩy hai đầu là sao ạ. Nó có ảnh hưởng gì đến hàm và nếu bỏ nó đi thì có sao không ạ.

char f13(char a)
{
char b,s;
for(b=1,s=0;b;b<<=1)
if(a&b)
s++;
return s;
}
*grab popcorn* viết 03:01 ngày 01/10/2018

Bài này dùng để đếm số bit 1 của a.
a & b tức là phép bitwise and
trả về 1 khi cả 2 cùng là 1.

Ở vòng lặp trên sẽ duyệt qua 8 bit một và AND với a. với mỗi lần AND sẽ xác định được xem vị trí đó trong a có phải là bit 1 không. Nếu phải thì tăng s lên 1.

time viết 03:12 ngày 01/10/2018

Cám ơn bạn. Nhưng cho mình hỏi thêm là sao lại có ;b; làm gì. Nó có ảnh hưởng không.

*grab popcorn* viết 03:06 ngày 01/10/2018

vì là left shift.
Nên tới 1 lúc nào đó b = 0
mà 0 là false -> dừng vòng lặp.

Bài liên quan
0