221,592
社区成员
发帖
与我相关
我的任务
分享数据的处理与存储
1、移位操作
(1)逻辑移位:数码位置变化
10001111
循环左移:00011111
(2)算术移位:符号位不变,数码位置变化

①正数原码/补码移位规则
数符不变(单:符号位不变,双:第一符号位不变)
空位补零(右移时第二符号位移至尾数最高位)
| 单符号位 | 双符号位 | |
| 00111 | 000111 | |
| 左移 | 01110 | 001110 |
| 右移 | 00011 | 000011 |
②负数补码移位
移位规则:
数符不变(单:符号位不变,双:第一符号位不变)
左移空位补0:
右移空位补1:(第二符号位移至尾数最高位)

2、舍入方法
(1)0舍1入(原码补码)
例:保留四位尾数:
0 00100原——>0 0010原
1 00101原——>1 0011原
1 11011补——>1 1110补
(2)末位恒置1(原码,补码)
例:保留4位尾数
0 00100原——>0 0011原
1 00101原——>1 0011原
1 11011补——>1 1101补
3、数据扩展与压缩
(1)符号扩展
直接把符号位(0/1)填充到扩展位
000A——>0000 000A
800A——>FFFF 800A
(2)0-扩展(高位均全补0,针对无符号数)
002A——>0000 002A
F12C——>0000 F12C
(3)位数压缩(弃高位,留低位)
F12B 800A——> 800A
02A0F12C——> F12C
4、数据存储
(1)小端模式
小地址单位存储数据的低位(即尾端)

(2)大段模式
大数据单位存储数据的低位(即尾端)

以unsigned int value = 0x12345678为例,分别看看在两种字节序下其存储情况,我们可以用unsigned char buf[4]来表示value
Big-Endian: 低地址存放高位,如下:
低地址
---------------
buf[0] (0x12) -- 低位字节
buf[1] (0x34)
buf[2] (0x56)
buf[3] (0x78) -- 高位字节
---------------
高地址
Little-Endian: 低地址存放低位,如下:
低地址
---------------
buf[0] (0x78) -- 高位字节
buf[1] (0x56)
buf[2] (0x34)
buf[3] (0x12) -- 低位字节
5、数据字的对齐
要求数据的地址是相应的边界地址

