byte h,l,dot,byteR0, byteG0;
h = 1;
l = 0;
byteR0 = 0xAF;
byteG0 = 0x35;for(dot=8;dot!=0 ;dot-=1)
{
if(byteR0 & 0x80)
R0 = h;
else
R0 = l; if(byteG0 & 0x80)
G0 = h;
else
G0 = l;
byteR0 <<= 1;
byteG0 <<= 1;
}这段代码的目的是把一个Byte中串行按bit传输出去。其中R0和G0是一个宏,用于给某个bit赋值,这个bit是用位域定义出来的。
h,l是全局变量,值只可能是0或者1,但编译期无法确定是0还是1。优化目的:尽可能的减少运行时间,可以增加代码量,但不能增加内存使用量。
h = 1;
l = 0;
byteR0 = 0xAF;
byteG0 = 0x35;for(dot=8;dot!=0 ;dot-=1)
{
if(byteR0 & 0x80)
R0 = h;
else
R0 = l; if(byteG0 & 0x80)
G0 = h;
else
G0 = l;
byteR0 <<= 1;
byteG0 <<= 1;
}这段代码的目的是把一个Byte中串行按bit传输出去。其中R0和G0是一个宏,用于给某个bit赋值,这个bit是用位域定义出来的。
h,l是全局变量,值只可能是0或者1,但编译期无法确定是0还是1。优化目的:尽可能的减少运行时间,可以增加代码量,但不能增加内存使用量。
解决方案 »
- vc .net 2002 如何将数据库内容显示在一个DBGRID里面
- 如何在visual studio 2008里面的Vc++里使用串口通信类 serialport
- WSASendTo 发送数据问题?
- 完成端口GetQueuedCompletionStatus返回出错的问题?
- 如何解决CImageList太耗内存
- vc怎么获得文件夹目录
- MFC的CFileDialog类创建一个系统保存对话框,这个对话框能否保存文件?
- 什么叫做VC FAQS?
- C或者WinAPI有没有填充多个变量的函数?就像Pascal的FillChar那样?
- 小白求问此源代码该如何编译!!!
- 求教一个编程问题
- 未处理的异常:0xC0000005: 读取位置 0x00000004 时发生访问冲突
2,变量byteR0 和byteG0 的值,也是根据传入的数据赋值的,不是常量。
请真正有热心的网友进来讨论,看帖不仔细的就不用麻烦了
byte h,l,dot,byteR0, byteG0;
h = 1;
l = 0;
byteR0 = 0xAF;
byteG0 = 0x35; dot = 0x80;
while(dot) {
R0 = (byteR0 & dot)?h:l;
G0 = (byteG0 & dot)?h:l;
dot >>= 1;
}
优化一下,不知何不何LZ意
给分 千万别客气
R0 = h;
else
R0 = l; table[0x81]talbe[0x80] = h;
talbe[0x40] = h;
talbe[0x20] = h;
talbe[0x10] = h;
talbe[0x08] = h;
talbe[0x04] = h;
talbe[0x02] = h;
talbe[0x01] = h;
talbe[0] = l;
展开 不要用if啊
R0 = talbe[byteR0 & 0x80]
G0 = talbe[byteG0 & 0x80]
R0 = talbe[byteR0 & 0x40]
G0 = talbe[byteG0 & 0x40]
R0 = talbe[byteR0 & 0x20]
G0 = talbe[byteG0 & 0x20]
R0 = talbe[byteR0 & 0x10]
G0 = talbe[byteG0 & 0x10]
R0 = talbe[byteR0 & 0x08]
G0 = talbe[byteG0 & 0x08]
R0 = talbe[byteR0 & 0x04]
G0 = talbe[byteG0 & 0x04]
R0 = talbe[byteR0 & 0x02]
G0 = talbe[byteG0 & 0x02]
R0 = talbe[byteR0 & 0x01]
G0 = talbe[byteG0 & 0x01]
-----------------------
是否也相当于:
if(byteR0 & dot)
R0 = h;
else
R0 = l;减少了一个位移,这确实是真的,呵呵
byte dot;
for(dot=8;dot!=0 ;dot-=1)
{
if(byteR0 & 0x80)
R0 = h;
else
R0 = l; if(byteG0 & 0x80)
G0 = h;
else
G0 = l;
byteR0 <<= 1;
byteG0 <<= 1;
} 强调:h、l、byteR0,byteG0均是byte类型的全局变量,由其它地方赋值。
h和l的值只会是0或者1,并且当h==0时,l必定等于1,当h==1时,l必定等于0目前优化后的代码为:(尚未经过验证)byte dot = 0x80;
while(dot)
{
if(byteR0 & dot)
R0 = h;
else
R0 = l; if(byteG0 & dot)
G0 = h;
else
G0 = l;
dot >>= 1;
}