联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现,那么究竟什么是联合、怎么去用、有什么需要注意的地方呢?就这些问题,我试着做一些简单的回答,里面肯定还有不当的地方,欢迎指出! 2、联合与结构的区别? 下面举一个例了来加对深联合的理解。 #include <stdio.h> 3、如何定义? 4、如何说明? 5、如何使用? 联合变量名.成员名 不允许只用联合变量名作赋值或其它操作,也不允许对联合变量作初始化赋值,赋值只能在程序中进行。 6、匿名联合 7、几点需要讨论的地方: typedef union _test data.ch;} (String),datatype.ch(p) { } } 错。
|
在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:
select * from gc_dfys
union
select * from ls_jg_dfys
这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。
而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。
从效率上说,UNION ALL要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL,如下:
select * from gc_dfys
union all
select * from ls_jg_dfys
UART 传输一个浮点数
悬赏分:20- 解决时间:2010-2-4 11:47
UART只能传输一个字节8位的数,想问问大家,如何用UART传输一个浮点数
比方说我现在有个变量是P = 89.432 如何把这个数通过UART传输到电脑上,我的程序是C语言,用的C8051的片子。
谢谢大家了
问题补充:
我的硬件平台就是C8051,没有什么特别的啊,一个浮点数要占用4个字节。
想问的就是具体如何拆分啊
有没有具体的做法?
我多给加分
提问者: agassi2002 - 五级
最佳答案
浮点数的表示在计算机里主要遵循ieee754,个别的可能有其内部的表示,这主要是由编译器决定的。
你先看一下,51编译器如何对浮点数的表示。主要是字节的存储顺序。再看一下pc上的编译器浮点数的字节顺序。把传送上到pc上的4个字节,按其顺序拼在一起,即可。如果有问题可发我邮箱。关于浮点数的表示可看以下链接
http://hi.baidu.com/olive1985/blog/item/ea2cd65c56686543fbf2c033.html/cmtid/5892b4c283303d1c0ef47759
主要是阶码和尾数的顺序问题
//下面的回答我补充一下
union f_data
{
float temp;
unsigned char fdata[4];
}float_data; //单精度的浮点数,便于拆分字节
//如果是双精度的则定义为
//union f_data
//{
//double temp;
//unsigned char fdata[8];
//}double_data;
//下面为发送单精度浮点数2.5
void send_data(void)
{
float_data.temp=-2.5;
send(float_data.fdata[3]);
send(float_data.fdata[2]);
send(float_data.fdata[1]);
send(float_data.fdata[0]);
}
//
//则接收程序如下
void receive_data(void)
{
float_data.fdata[3] = receive_byte();
float_data.fdata[2] = receive_byte();
float_data.fdata[1] = receive_byte();
float_data.fdata[0] = receive_byte();
}
//接收到的数据为float_data.temp
//如果两台机器浮点数遵循的标准不一样,则调整一些接受字节的顺序