|
发表于 2016-8-2 17:52:09
|
|阅读模式
书上一段关于数据压缩算法的代码,简化如下
压缩: a=(b<<4)|(c&0x0f) 注意,a是有符号char型一个字节,bc都是有符号int双字节,bc是一个比较小的有符号数,4bit内,这句代码中bc都是两个int型的差值,算法本意主要是把本来要存储的很多个(这里假设3个)差不多大的有符号int型数据转换为存一个int初始值和两个差值b和c,然后b和c拼装成char型,这样省出空间,
左看右看有一下几个问题
1:如果b和c这里都是负数,那么一个负数双字节int和0x0f与运算,结果应该是提升为int型,但是符号位是不是没了?
2:拼装完了的int型直接这么赋值给char型的a,代码里都不强制转换下?
解压:
x=a>>4;
y=a&0x0f;
if(y>7) y|=0xfff0;
a是前面拼装的char型,xy是有符号int型,这里也是char直接赋值给int,没有强制类型转换,而且只判断拼装的后面y做符号位扩展,为啥不判断x? |
|