求教这个位运算,看不懂,哪位高手能通俗易懂帮解释下

求教这个位运算,看不懂,谁能通俗易懂帮解释下
bool is_task_finished(uint8_t* task_list, uint32_t task_id)
{
if (task_id > 2048) {
return false;
}

int byte = (task_id - 1) / 8;
int bit = ((task_id - 1) % 8);
//DEBUG_LOG("is task finished:[%d %d %d %d]", task_id, task_list[byte], bit, task_list[byte] & (0x1<<bit));
if (task_list[byte] & (0x1<<bit)) {
return true;
}
return false;
}
------解决思路----------------------
引用:
这个很简单啊,就是用256个字节一共(256x8=2048)位,表示2048个task的状态嘛
比如task_id = 12的时候,
byte = (12 - 1) / 8 = 1
bit   =  (12 - 1)%8 = 3;
task_id 对应第2(1+1)字节的第4(3+1)位,
0123-4567-
------解决思路----------------------
-0123-4567
xxxx-xxxx-
------解决思路----------------------
-xxx0-xxxx
第1字节   
------解决思路----------------------
 第2字节

这个看起来直观一些
7654-3210-
------解决思路----------------------
-7654-3210
XXXX-XXXX-
------解决思路----------------------
-XXXX-XXXX
第1字节XX-
------解决思路----------------------
-第0字节