位、字节操作备忘

数据类型:

1、char: 一个字节,8位二进制、2位16进制0x00-0xFF,十进制:0-255(unsigned) 或 -128-127(signed)

2、short:二个字节,16位二进制、4位16进制0x0000-0xFFFF ,十进制:0-65535(unsigned) 或-32768-32767(signed)

3、long:四个字节,32位二进制、8位16进制  ,十进制:以此类推。

4、double:八个字节,64位二进制、16位16进制, 十进制:可能有点特别,没研究。

 

有无符号:

无符号:所有二进制位都表示数字,原码计算数字大小。 例:1111 0000——128+64+32+16 = 240

有符号: 第一位表示符号,其余二进制位表示数字,计算值:正数原码计算,负数:-(补码=反码+1)。例:1111 0000[原码]—— -(0000 1111[反码] + 1)[补码]= -0001 0000 = -16

 

位操作:

两个char(short)类型单(双)字节的二进制值 合成short(long)类型双(四)字节二进制值:

char valueLo, valueHi; short value = valueHi<<8 | valueLo & 0xFF;

short valueLo, valueHi; long value = valueHi<<16 | valueLo & 0xFFFF;

特别注意:当两个8位/16位二进制转成16位/32位二进制时,首先每一个8位/16位二进制数的位数会先增加到16位/32位,而后进行位操作。也就是在位操作之前,数据需要先补位,补位涉及到一个关键问题:有符号数的负数补位会将高位所有二进制位补为1,而其他情况均以0补位。因此,一定要给两个被合成数据的低位 &0xFF或0xFFFF,来将补位强制为0。以保证数值正确。

一个short(long)类型双(四)字节的二进制值 拆分char(short)类型单(双)字节二进制值:

short value;

char valueLo = value & 0xFF;

char valueHi = (value >> 8) & 0xFF;

long value;

short valueLo = value & 0xFFFF;

short valueHi = (value >> 16) & 0xFFFF;

注意:一般先写低位,防止高位移位操作改变原数据。此例中没有该问题,但要注意。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值