KEIL uV3 C51

来源:百度知道 编辑:UC知道 时间:2024/05/08 20:24:10

#include <REGX51.H>
unsigned char shu1;
unsigned char shu2;
unsigned int temp;
void main(void)
{
shu1=200;
shu2=300;
temp=shu1*shu2;运行结果temp=8800(出错)
while(1);
}


#include <REGX51.H>
unsigned int shu1;
unsigned int shu2;
unsigned int temp;
void main(void)
{
shu1=200;
shu2=300;
temp=shu1*shu2;//运行结果temp=60000(正确)
while(1);
}
请问为什么第一段代码运行结果出错,
第二段代码运行结果正确,
哦,,

我明白了,,shu2=300;值太大了,,

不用回答了

既然你明了我就不说了

第一段你定义的是unsigned char shu1,本数据类型的范围是0-255之间,你写的300超出此范围,300转二进制为(100101100)取低8位后变为(00101100),相当于十进制的44,所以结果是8800。
请加分。谢谢!

第一段你定义的是unsigned char shu1,本数据类型的范围是0-255之间,你写的300超出此范围,300转二进制为(100101100)取低8位后变为(00101100),相当于十进制的44,所以结果是8800。
盗用的...

数据类型不一样。。。当然会出错啦。。。。

unsigned char 是0到255的。。。
你弄个300进去只好取第八位了。。

所以结果是8800

而第二个的INT最大支持到65535,不用舍弃高位,所以相加就正确了