免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3997 | 回复: 6
打印 上一主题 下一主题

请教一个COBOL问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-10 16:30 |只看该作者 |倒序浏览
cobol 里面的 变量声明
10    ORDER  PIC  S9(5)

1 、这里面的 S 有什么意义?
2 、S9(5)和9(5)有什么区别呢?
3、这样声明后,ORDER变量里面存放的数据范围是什么?

谢谢大家

论坛徽章:
0
2 [报告]
发表于 2006-03-10 17:03 |只看该作者
这个问题对400的人来说是简单的,但我不了解COBOL,问一下这个数据定义只是要和C语言的字段声明对应一下,谢谢

论坛徽章:
0
3 [报告]
发表于 2006-03-10 17:15 |只看该作者
1. S  代表正负号,即可以存正数和负数
2.S9(5)可以存正数和负数,9(5)只能存正数
3 。有待大家指点

论坛徽章:
0
4 [报告]
发表于 2006-03-10 22:18 |只看该作者
S代表有符号
9(5)就是五位的数值型
你用二进制转换一下,就知道范围了

论坛徽章:
0
5 [报告]
发表于 2006-03-12 11:47 |只看该作者

答复:请教一个COBOL问题

这里面的 S 与DDS 中的
A              Field               4S 0
一样,表示sign 有符号型数字变量
正如楼上的兄弟jamc说的一样S表示有正负号的变量。
在DDS中如果缺省的不写S会认为是S

A              Field               4   0
等同于
A              Field               4S 0

而在cobol中必须声明9(5)或者S9(5),
前者就不考虑符号了,正如楼上的兄弟jamc说的一样,
前者就只能放正数了。
系统这样设计是有道理的,早在很久很久以前,那时候硬盘和内存都相当的值钱,
DB2系统中数字存储是
hex  0000
        0123
dec   123
十六进制中需要4个位来保存,第一位存符号,表示正负,后三位存123,如果字段范围是正数,则可以定义为9(5),省掉第一位符号位。现在一般都不在乎了,全都定义为S9(5)(硬盘和内存都降价了)

其次是P型变量,rpg中是P,cobol中是comp-4,
DB2系统中数字存储是
hex  0002
        0013
dec   123
这样123在P(Pack)型变量中存储只需要2个位,而S(Sign)要4个位,U(Unsign)要3个位
又例如
hex  000135
        000246
dec   123456
这样数字字段的存储将减少一半的存储空间,在当年是多么的节省啊!
但在今天却很不方便,因为P型字段用FTP无法下载到PC,必须在400做转码!

论坛徽章:
0
6 [报告]
发表于 2006-03-13 09:22 |只看该作者
多谢二位

论坛徽章:
0
7 [报告]
发表于 2006-07-12 16:20 |只看该作者
发表于: 2006-3-10 16:30      [引用]  [投诉] [快速回复]  


--------------------------------------------------------------------------------

1 S表示数值数据带符号。
2 s9(5)和9(5)的区别是:
  前者是在内存中带符号的,而后者是不带符号的。
3 这样声明后,ORDER中变量的数据范围还是占5个字节,因为s是不计入数据项的长度中。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP