c51中的bit,char的强制类型转换。
data为非0,,bit强制后,为1。否则为0
data的在char强制后取后8位。
(1)强制转换有什么好处?
例如:
unsigned char x ;
sbit SDA = P1^0 ;
1)、要用x来记录p1.0的值,可以用:
for(i=0;i<8;i++)
{
x |= (unsigned char )SDA ;
x <<=1;
}
2)、要用SDA来一位一位传送x的值,可以:
for(i=0;i<8;i++)
{
SDA = (bit)(x&0x80);
x <<=1;
}
在进行强制转换时,如果要转换成的格式位数小于原本的位数,则舍弃高位保留低位,比如将int型(16位)的转换成char型(8位),则会舍去高八位,保留int型的低八位,所以结果是0
http://blog.sina.com.cn/s/blog_533f26760102vg0i.html
谭浩强 C语言 第三版
类型转换
如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:
实型赋予整型,舍去小数部分。前面的例子已经说明了这种情况。
整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。
字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。整型赋予字符型,只把低八位赋予字符量。
自己加注:标准C没有位类型,通过具体实例,模拟SPI,IIC串行按位读写字节时SDA=temp&0x80;或者SDA=(bit)(temp&0x80);是按照bit(0x80) ?bit(true),bit(fals)如果(dat&0x80)结果不为零,0x80不等于true;(dat&0x80)结果不为零,则为false。
数据类型转化灵活设置原则,以事实为依据2020.3.7
数据类型转换
·自动转换:在不同类型数据的混合运算中,由系统自动实现转换,由少字节类型向多字节类型转换。不同类型的量相互赋值时也由系统自动进行转换,把赋值号右边的类型转换为左边的类型。
·强制转换:由强制转换运算符完成转换。