搜索
bottom↓
回复: 8

请教第六章187页程序,请马老师解释

[复制链接]

出0入0汤圆

发表于 2011-11-10 22:33:08 | 显示全部楼层 |阅读模式
void HC164_send_byte(char byte)
{
   char i;
   for(i=0;i<=7;i++)
  {
     HC164_data=byte&1<<i;
     HC164_clk=1;
     HC164_clk=0;
  }
}
    " HC164_data=byte&1<<i;" 这句程序求解释?

出0入0汤圆

发表于 2011-11-11 00:40:51 | 显示全部楼层
有哪位朋友可以具体解释吗?

相当于:

if (data & 1<<i)
   HC164_data = 1;
else
   HC164_data = 0;

出0入0汤圆

发表于 2011-11-11 00:58:27 | 显示全部楼层
唉,这事还要劳烦马老师新自动手,LZ罪过

出0入0汤圆

发表于 2011-11-11 01:04:00 | 显示全部楼层
我觉得楼主搞不清楚 byte&1<<i 是啥意思

根据循循环的次数,把byte的每一位发送出去

运算结合:byte & (1 << i)
i为0的时候取的是byte的最低位
为1时,取第1位

。。。。。
为7时,取第7位,也就是最高位
为8时,不要多想了,循环结束了

出0入0汤圆

发表于 2011-11-11 12:21:24 | 显示全部楼层
都是夜猫子

出0入0汤圆

发表于 2011-11-11 15:43:16 | 显示全部楼层
回复【3楼】billowtust
我觉得楼主搞不清楚 byte&amp;1&lt;&lt;i 是啥意思
根据循循环的次数,把byte的每一位发送出去
运算结合:byte &amp; (1 &lt;&lt; i)
i为0的时候取的是byte的最低位
为1时,取第1位
。。。。。
为7时,取第7位,也就是最高位
为8时,不要多想了,循环结束了
-----------------------------------------------------------------------

你解释了第一个层面的问题。如果LZ不懂,应该把C好好回顾一下。

第2个层面问题是关于赋值。
HC164_data是BIT变量,这种类型的变量在标准C里是没有的。
BIT变量只能有两个值“0”和“1”,当赋值号右面表达式结果不为0时HC164_data为1,表达式结果为0时HC164_data为0。

这个类同标准C中的逻辑表达式:
语句 if () 的括号内就是一个逻辑表达式的结果,如果在括号内是一个其它的,比如算数表达式,就需要把这个表达式的结果转换成逻辑结果“0”或“1”,转换的规则也是结果不为0时为1,结果为0时为0。为1执行if部分,为0执行else部分。

第2层意思不了解还说的过去,因为毕竟是扩展的C,不过稍微思考类比一下,也是可以理解的。

出0入0汤圆

 楼主| 发表于 2011-11-13 15:38:05 | 显示全部楼层
回复【5楼】machao
-----------------------------------------------------------------------

谢谢马老师!

出0入0汤圆

发表于 2011-11-14 23:46:50 | 显示全部楼层
"    HC164_data=byte&1<<i; "

that's a poor way of coding it:

1) try to use masks;
2) use brackets for better readability:     

HC164_data=byte & (1<<i);

出0入0汤圆

发表于 2011-11-15 11:18:29 | 显示全部楼层
HC164_data=byte & (1<<i);  
这样好明白
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 17:55

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表