type
status
date
slug
summary
tags
category
icon
password
书籍
“パック10進数”是指“Packed Decimal”,也称为“Packed BCD”或“Packed Decimal Coding”。这种编码方式将十进制数字以紧凑的形式存储,每个字节可以存储两个十进制数字(0到9)。

パック10進数(packed BCD)とは、数値をコンピュータ上で表現する手法の一つで、BCDをベースに定義されている。COBOLのUSAGE句ではCOMP-3形式として表されることが多い。当初はゾーン10進数で表現していたが、1桁につき1バイト(= 8ビット)を要し、場所をとる。そこで、無駄になっていたゾーンビットにも数値を割り当て、1バイトで2桁表現できるようにしたものがパック10進数である。
10進数の1桁を4桁の数値ビットで表現するが、正の数か負の数かを判断するため、符号ビットと呼ばれる4ビットを、数値の末尾に追加する。符号ビットは、正の数に12、負の数に13が割り当てられている。ただし、東芝のオフィスコンピュータでは、符号ビットが特殊な値を採るので互換性の問題が発生する。

Packed Decimal 的特性
- 存储方式:每个字节包含两个十进制数字。对于 8 位字节,可以存储两个十进制数字。
- 符号位:通常,最后一个 nibble(4 位)用于存储符号。常见的做法是使用特定的值表示正负号,例如:
- 0x0 表示正数
- 0xF 表示负数
示例:如何表示数字 25 和 -25
- 正数 25 的 Packed Decimal:
- 25 的十进制表示是:
25
- Packed Decimal 编码为:
0010 0101
(即 0x25,两个数字分别为 2 和 5)。
- 负数 -25 的 Packed Decimal:
- 25 的十进制表示是:
25
- Packed Decimal 编码为:
0010 0101
(即 0x25) - 需要在最后一 nibble 加入符号信息,表示为
0010 0101 0000 1111
(表示负数,通常将符号位放在最后一个 nibble)。 - 这样,-25 的 Packed Decimal 表示为:
0010 0101 1111
(0x25 F)。
总结
“パック10進数”是一种高效的十进制存储方式,特别是在需要处理大量十进制数据时,可以节省存储空间。
步骤 1: 转换正数 6158 为 Packed Decimal
- 正数 6158 的十进制表示:
6158
- 拆分成单个数字:
6
,1
,5
,8
- 转换为 Packed Decimal:
- 将每个数字转换为 4 位二进制:
- 6 ->
0110
- 1 ->
0001
- 5 ->
0101
- 8 ->
1000
- 组合成二进制:
- 将它们组合起来:
步骤 2: 添加符号位
对于 Packed Decimal,负数通常在最后一个 nibble 中加上符号信息。通常,负数的符号位表示为
1101
(或在某些编码中使用特定的位表示)。具体表示
- 正数 6158 的 Packed Decimal:
0110 0001 0101 1000
- 负数 -6158 的 Packed Decimal:
- 我们可以将符号位加在末尾,形成完整的 Packed Decimal。
- 在这里,使用
1101
(表示负数)作为符号位。
合并最终结果
将所有部分合并:
最终表示
因此,-6158 的 Packed Decimal 可以表示为:
- 完整二进制:
0110 0001 0101 1000 1101
- 打包表示(结合符号位)可能变为 24 位:
0000 0110 0001 0101 1000 1101
- 作者:みなみ
- 链接:https://www.minami.ac.cn//%E8%B3%87%E6%A0%BC%E5%8B%89%E5%BC%B7/124d7ae8-88e2-80ea-a2ab-d481e182f441
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章