Cần giải thích ý nghĩa đoạn code chuyển số thập phân về dạng nhị phân

Mình có đoạn code này trên mạng của một bạn nào đó liên quan đến việc đưa một số thập phân sang nhị phân, mong mọi người giải đáp ý nghĩa của dòng lệnh if(((m) & ((1L) << (n))) !=0), cách thức hoạt động của đoạn code này.

template <typename T>
void ChuyenNhiPhan(T n)
{
int i=0;
for(i=sizeof(n)*8-1;i>=0;i--)
{
cout<<(GiaTri(n,i)?"1":"0");
if(0==1%4)
cout<<" ";
}
cout<<endl;
}

bool GiaTri(long m, int n)
{
if(((m) & ((1L) << (n))) !=0) // Dòng này
return true;
return false;
}

Dùng phép toán dịch bit (bit shift) và & (bit and) để lấy bit tại một vị trí n của số m. Trả về true nếu là 1, false nếu là 0.
Bạn phải hiểu về toán bit thì mới hiểu được nó.

Toàn bộ đoạn mã trên có thể viết đơn giản hơn nhiều.

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