C++ Builder2009数据转换问题

tennis_0123 2015-05-27 06:50:21
各位前辈,大侠
我有一问题,这几天一直困扰我,要么编译不过,要么最后的显示结果不对。想实现的事情是这样的,把一个字节A,与另外一个字节B的前三位连接合并,A作为高8位,B作为低3位,形成一个11位的二进制数据C,且C的最高位bit[10],就是数据A的最高位bit[7]为符号位,把这样一个数,按照下列规则转换成10进制数(有正、有负),并显示出来[Label->Caption]。

数据C bit[0]等于数据B bit[5],代表0.125;
数据C bit[1]等于数据B bit[6],代表0.250;
数据C bit[2]等于数据B bit[7],代表0.500;
数据C bit[3]等于数据A bit[0],代表1.000;
数据C bit[4]等于数据A bit[1],代表2.000;
数据C bit[5]等于数据A bit[2],代表4.000;
数据C bit[6]等于数据A bit[3],代表8.000;
数据C bit[7]等于数据A bit[4],代表16.00;
数据C bit[8]等于数据A bit[5],代表32.00;
数据C bit[9]等于数据A bit[6], 代表64.00;
数据C bit[10]等于数据A bit[7], 代表符号位, 0表示正数,1表示负数;
当C bit[10]位1时,也是二进制逐位取反,+0.125来换算成相应的10进制数,例如:
A = 0000, 0000; B = 000; C = 0000, 0000, 000, 十进制为0;
A = 0000, 0001; B = 001; C = 0000, 0001, 001, 十进制为1.125;
A = 0000, 0010; B = 010; C = 0000, 0010, 010, 十进制为2.250;
A = 0001, 1001; B = 110; C = 0001, 1001, 110, 十进制为25.750;
A = 0111, 1111; B = 111; C = 0111, 1111, 111, 十进制为127.875;
A = 1111, 1110; B = 111; C = 1111, 1110, 111, 十进制为-1.125;
A = 1111, 1101; B = 110; C = 1111, 1101, 110, 十进制为-2.250;
A = 1110, 0110; B = 010; C = 1110, 0110, 010, 十进制为-25.75;
A = 1000, 0000; B = 001; C = 1000, 0000, 001, 十进制为-127.875;

请教给为给予指点,在线等,不吝赐教。
...全文
116 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tennis_0123 2015-06-02
  • 打赏
  • 举报
回复
感谢,在第一行,第二行之间少了一句: bb=B>>5; //B右移5bit;
bigfog 2015-05-29
  • 打赏
  • 举报
回复

float My_Encode(char A,char B)
{
	float cc,dd;
	dd=(float(B&0x7))*0.125;
	cc=float(A)+dd;
	return cc;
}
void __fastcall TForm8::Button1Click(TObject *Sender)
{
char A,B;
A=0xFE;       //A = 1111, 1110; B = 111; 那么C = 1111, 1110, 111, 十进制为-1.125;
B=0x7;

String str;
str.sprintf("%.3f",My_Encode(A,B));
Edit3->Text=str;
}
虽然不完美,但可以结贴给分了
tennis_0123 2015-05-28
  • 打赏
  • 举报
回复
我再准确的描述一遍: 想实现的事情是这样的,把一个字节A[8bit],与另外一个字节B[8 bit]的前三位连接合并,形成一个11bit的数据C,其中A的8个bit作为高8位,B的最高3bit作为低3位,且C的最高位bit[10],就是数据A的最高位bit[7]为符号位,把这样一个数,按照下列规则转换成10进制数(有正、有负),并显示出来,放在Label->Caption属性里。 数据C bit[0]等于数据B bit[5],代表0.125; 数据C bit[1]等于数据B bit[6],代表0.250; 数据C bit[2]等于数据B bit[7],代表0.500; 数据C bit[3]等于数据A bit[0],代表1.000; 数据C bit[4]等于数据A bit[1],代表2.000; 数据C bit[5]等于数据A bit[2],代表4.000; 数据C bit[6]等于数据A bit[3],代表8.000; 数据C bit[7]等于数据A bit[4],代表16.00; 数据C bit[8]等于数据A bit[5],代表32.00; 数据C bit[9]等于数据A bit[6], 代表64.00; 数据C bit[10]等于数据A bit[7], 代表符号位, 0表示正数,1表示负数; 当C bit[10]位1时,也是二进制逐位取反,+0.125来换算成相应的10进制数,例如: A = 0000, 0000; B = 000; 那么C = 0000, 0000, 000, 十进制为0; A = 0000, 0001; B = 001; 那么C = 0000, 0001, 001, 十进制为1.125; A = 0000, 0010; B = 010; 那么C = 0000, 0010, 010, 十进制为2.250; A = 0001, 1001; B = 110; 那么C = 0001, 1001, 110, 十进制为25.750; A = 0111, 1111; B = 111; 那么C = 0111, 1111, 111, 十进制为127.875; A = 1111, 1110; B = 111; 那么C = 1111, 1110, 111, 十进制为-1.125; A = 1111, 1101; B = 110; C = 1111, 1101, 110, 十进制为-2.250; A = 1110, 0110; B = 010; 那么C = 1110, 0110, 010, 十进制为-25.75; A = 1000, 0000; B = 001; 那么C = 1000, 0000, 001, 十进制为-127.875; 这样的换算,程序上应该怎么写代码?
缘中人 2015-05-28
  • 打赏
  • 举报
回复
你能不能再简单举个例子啊,用到进制转换,你先找找例子看能不能用上
tennis_0123 2015-05-28
  • 打赏
  • 举报
回复
还在等高人,指点一下。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧