今天在写关于DS18B201温度采集的代码时,遇到了之前不常见的数据位移动满位后再赋值给u16的情况。
正常在我的猜想里面是,u8移动8位导致数据溢出,整个u8无论之前是什么值,都会变为0x00,然而实际上并不会。为此我特地编写了一个验证函数如下图:
即使移动位数增加到20位,只要总位数没有超过接受数据的位数,都是可以正常显示的:
由此我们可以得到一个简单的推论,计算机在处理数据时是不看你的数据到底有多少位的,之所以要规定一下常用的数据类型,是为了显示以及方便存储管理和避免地址浪费。在进一步讲,就算你在计算时用了100位,计算机也大概率不会管(没有验证过),只不过在接受这个100位的数据时受到数据类型的位数限制而显示不全罢了。