ゾーン10進数とパック10進数というのは、基本情報試験にでてきますが、実際はどこに使われているのでしょうか。使い分けはあるのでしょうか?

A 回答 (2件)

元々はIBMのメインフレームコンピュータですね。


ゾーン10進数は、1バイトで1桁を表すので、数字の文字表現と互換性があります。パック10進数は4ビットで1桁を表せるのでより効率がよいことになります。CPUで実際に計算できるのはパック10進数です。
入力データは文字なのでゾーンです。これをパックに変換して、計算の時はパックで処理され、印刷の時にゾーンに変換して文字化します。簡単に書くと、
・文字表現での入出力のとき→ゾーン
・計算のとき→パック
電卓なんかも内部は2進でなく10進計算ですね。内部処理はパックのはずです。
    • good
    • 0
この回答へのお礼

なるほど!よくわかりました。両方使われているのですね。ありがとうございました

お礼日時:2005/04/21 19:30

COBOLかな?一番つかわれてるのは。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qゾーン10進数とパック10進数の違い

今度、内定者向けの研修で基本情報の対策をするのですが、その際に「ゾーン10進数」と「パック10進数」の違いを説明する事になりました。

だいたいの違いは分かるのですが、これをコンピュータの知識のあまりない学生に分かりやすく説明するにはどうすれば良いでしょうか?

皆様のお知恵をお借りしたいと思います。よろしくお願い致します。

Aベストアンサー

ゾーン10進数もパック10進数も、基本的には数字を文字として扱った
データの形です。

で、単純に数字を「文字」として扱う場合10種類のコード、即ち4ビット
あれば表現出来るのですが、AscII文字列は8ビットもデータを使う=
数値表現にはなくてもいいビットが4ビットもあるんです。

パック10進数は、この「もったいない4ビット」を消して、4ビットで
数字を表わしたものです。ただ、4ビットだけだと「符号」が分からなく
なるので、最後に符号の「4ビット」をつけます。

文字扱いの数字を4ビット×2に「パッキング(詰め込んだ)」数字形式
なので、「パック」と言うんですね。

ちなみにゾーン10進数は、数字を数字たらしめるゾーン=前半4ビット
(実際にゾーン部って言います)があるのでゾーン10進数と言います。

・・・コレで説明は大丈夫ですかね?

参考URL:http://www.jtw.zaq.ne.jp/kayakaya/new/kihon/text/zonepack.htm

Q数字文字列をパック10進数に変換するにはどうしたらいいのでしょうか?

"1234567"という文字列を
パック10進数に変換したいのですが、
どのようにしたら良いのでしょうか?

まず左に4bitシフトさせてから符号部分の4bitを
うまく取り除ければ出来ると思うのですが、どう実装したら良いか分かりません。

よろしくお願いします。

Aベストアンサー

#2です。入力文字のサイズと変換結果を格納するサイズを指定して、変換を行いたいように見えましたので、そのように修正しました。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void topack(int len1,char *str1,int len2,char *str2)
{
//len1:入力文字列長
//str1:入力文字
//len2:出力結果長
//str2:出力結果
int s1 = 0;
int i;
char x;
memset(str2,0x00,len2);
for (i=0;i<len2;i++){
s1++;
if (s1 >len1) break;
x = *str1++ & 0x0f;
x = x << 4;
s1++;
if (s1<=len1){
x |= *str1++ &0x0f;
}
*str2++ = x;
}
}
int main()
{
unsigned char out[8];
memset(out,0xff,sizeof(out));
topack(7,"12345679875",4,out);
printf ("out=%02x%02x%02x%02x%02x%02x%02x%02x\n",
out[0],out[1],out[2],out[3],out[4],out[5],out[6],out[7]);
memset(out,0xff,sizeof(out));
topack(8,"12345678777",3,out);
printf ("out=%02x%02x%02x%02x%02x%02x%02x%02x\n",
out[0],out[1],out[2],out[3],out[4],out[5],out[6],out[7]);
topack(3,"12345678777",4,out);
printf ("out=%02x%02x%02x%02x%02x%02x%02x%02x\n",
out[0],out[1],out[2],out[3],out[4],out[5],out[6],out[7]);
return 0;
}

#2です。入力文字のサイズと変換結果を格納するサイズを指定して、変換を行いたいように見えましたので、そのように修正しました。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void topack(int len1,char *str1,int len2,char *str2)
{
//len1:入力文字列長
//str1:入力文字
//len2:出力結果長
//str2:出力結果
int s1 = 0;
int i;
char x;
memset(str2,0x00,len2);
for (i=0;i<len2;i++){
s1++;
if (s1 >len1) break;
x = *str1++ & 0x0f;
x = x << 4;
...続きを読む


人気Q&Aランキング

おすすめ情報