android与单片机通信遇到有符号数和无符号数的转换问题简析

  在计算机中数值都是以二进制的形式进行存储好计算的。有符号数就是最高位的1代表符号,最高位为1代表为负数,最高位为0代表正数。



  原码:正数的原码是其本身,负数的原码是其绝对值加上符号位,例如8位二进制:

 1的原码=0000 0001,-1的原码=1000 0001;

 反码:正数的反码和原码相同,负数的反码是符号位不变其他位取反,例如8位二进制:

1的反码=0000 0001, -1的反码=1111  1110;

补码:正数的补码是其本身,负数的补码是其反码加1,例如8位二进制:

1的补码=0000 1111, -1的补码=1111  1111;

计算机中存储数据时是存储的补码。

1android屏发送-2给单片机

如果把-2存入单片机中需要将其转换成16进制有符号数进行存储,首先将-2转换成补码

-2的补码=1111  1111  1111  1110;

android屏无法直接把-2发送给单片机,需要将-2转化成补码发送给单片机

-2是int类型的32位

方法是;-2&0xFFFF.就可以了,有符号数&无符号数结果是-2的补码换算成16进制位65534.这样就可以直接发送-2&0xFFFF直接发送给单片机了。

-2&0xFFFF只保留了低16位把高16位去掉。

2android屏读取单片机中有符号数65534显示为-2

把-2的补码转化成源码:减一取反  -(~(65534-1)&0xFFFF ) 结果为-2.

需要对最高位进行判断是否有符号:

读取的单片机数据为result显示成无符号位

int reInt = Integer.valueOf(result);
						if ((reInt & 32768) == 32768) {
							// tyy 存在符号位
							  -(~(reInt-1)&0xFFFF )
						} else {//tyy 不存在符号位}

这就是我的总结,详细了解原码 反码 补码参考 http://blog.csdn.net/daiyutage/article/details/8575248


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值