当前位置: 代码迷 >> 单片机 >> 如何理解 unsigned char mask = 1 << (i - 1)
  详细解决方案

如何理解 unsigned char mask = 1 << (i - 1)

热度:234   发布时间:2016-04-28 15:58:36.0
怎么理解 unsigned char mask = 1 << (i - 1);
for(i=8;i>0;i--)
{
 mask = 1 << (i - 1); //不理解 这个意思
…… 

}
怎么理解?



------解决方案--------------------
第1次循环:mask的第7位置1,即为0x80,10000000b
第2次循环:mask的第6位置1,即为0x40,01000000b
第3次循环:mask的第5位置1,即为0x20,00100000b
第4次循环:mask的第4位置1,即为0x10,00010000b
第5次循环:mask的第3位置1,即为0x08,00001000b
第6次循环:mask的第2位置1,即为0x04,00000100b
第7次循环:mask的第1位置1,即为0x02,00000010b
第8次循环:mask的第0位置1,即为0x01,00000001b
------解决方案--------------------
探讨

第1次循环:mask的第7位置1,即为0x80,10000000b
第2次循环:mask的第6位置1,即为0x40,01000000b
第3次循环:mask的第5位置1,即为0x20,00100000b
第4次循环:mask的第4位置1,即为0x10,00010000b
第5次循环:mask的第3位置1,即为0x08,00001000b
第6次循环:mask的第2位置1,即为0x04,……

------解决方案--------------------
探讨

第1次循环:mask的第7位置1,即为0x80,10000000b
第2次循环:mask的第6位置1,即为0x40,01000000b
第3次循环:mask的第5位置1,即为0x20,00100000b
第4次循环:mask的第4位置1,即为0x10,00010000b
第5次循环:mask的第3位置1,即为0x08,00001000b
第6次循环:mask的第2位置1,即为0x04,……

------解决方案--------------------
第1次循环:mask的值左移7位
第2次循环:mask的值左移6位
第3次循环:mask的值左移5位
第4次循环:mask的值左移4位
第5次循环:mask的值左移3位
第6次循环:mask的值左移2位
第7次循环:mask的值左移1位
第8次循环:mask的值左移0位

------解决方案--------------------
<<是左移位符,i-1表示移位次数,楼上上面说的都对。
------解决方案--------------------
嗯, 每次循环 mask 8位中的1位为"1", 用于...中的操作.
  相关解决方案