单片机位判断,与预期想去甚远,分析不出来
只是简单判断寄存器的每个bit的值,输出高低电平。本来0xFF判断后应该输出8个“1”,结果烧录出来后用示波器测试是“1100 0000”。程序拷出来用VS2019单步执行,还是一样的结果,百思不得其解,望坛友解惑,以下是程序代码: #include <iostream>int main() { unsigned char n = 0; unsigned char Data = 0xff; unsigned char temp = 0; temp = Data; for (n = 0; n < 8; n++) { if (temp & 0x80 == 0x80) { std::cout << "1\n"; } else { std::cout << "0\n"; } temp = Data << n; } } 不会编辑格式,看起来好乱,望见谅 截图在此 代码改成这样试试:for (n = 0; n < 8; n++)
{
if ((temp & 0x80) == 0x80)
{
std::cout << "1\n";
}
else
{
std::cout << "0\n";
}
temp <<= 1;
} 注意优先级
if (temp & 0x80 == 0x80)
改为
if ((temp & 0x80) == 0x80)
或
if (temp & 0x80) 运算符优先级问题,VS 都给你标出来了,== 比 & 的优先级高
另外只判断最高位的话写 (temp & 0x80) != 0 好一些
药到病除,多谢坛友出手相助 怎么不用 if ((temp & 0x80) ) 百思不得其解时,可以加加括号,或者把运算代码一步步拆开运算调试 不用括号不拆开分步执行的后果 temp = Data << n; n应该改成1 编译器都给你标出警告了 大VS都给你波浪线了,问题很明显的
页:
[1]