Ibm midrange RPG/RPGLE-包含有符号和压缩值的数据结构的行为:

Ibm midrange RPG/RPGLE-包含有符号和压缩值的数据结构的行为:,ibm-midrange,rpgle,Ibm Midrange,Rpgle,。。。更新一些旧代码时,遇到了包含签名和压缩值的数据结构的有趣行为: D #SIGNED S 5S 0 INZ D #PACKED S 5P 0 INZ D*--- D #AS_1

。。。更新一些旧代码时,遇到了包含签名和压缩值的数据结构的有趣行为:

D  #SIGNED        S              5S 0 INZ                           
D  #PACKED        S              5P 0 INZ                           
D*---                                                               
D #AS_1           DS                                                
D  #AS1                               LIKE(#SIGNED) INZ             
D  #AS2                               LIKE(#SIGNED) INZ             
D  #AS3                               LIKE(#SIGNED) INZ             
D #AP_1           DS                                                
D  #AP1                               LIKE(#PACKED) INZ             
D  #AP2                               LIKE(#PACKED) INZ             
D  #AP3                               LIKE(#PACKED) INZ             
C                                                                   
C*  for single signed, this is true                       
C     #AS1          IFEQ      *ZEROS                      
C                   EXSR      MYSR                        
C                   ENDIF                                 
C                                                         
C*  for single packed, this is true                       
C     #AP1          IFEQ      *ZEROS                      
C                   EXSR      MYSR                        
C                   ENDIF                                 

C*  for DS of signed, this is true                        
C     #AS_1         IFEQ      *ZEROS                      
C                   EXSR      MYSR                        
C                   ENDIF                                 
C                                                         
C*  however for DS of packed, this is false                            
C     #AP_1         IFEQ      *ZEROS                                   
C                   EXSR      MYSR                                     
C                   ENDIF                                              
C                                                                      
C                   Eval       *INLR = *ON                             
C                   Return                                             
 *****************************************************************     
C     MYSR          BEGSR                                              
C                   ENDSR                                     

我想这是因为包装是如何在内部存储的…

这是多种因素的组合

DS只是字节的集合,因为RPG没有字节类型,所以它基本上将其视为SBCS字符的集合

*零是一个符号名,它转换为一个重复的x‘F0’,表示比较/分配给变量的长度

字符“0”是x“F0”,分区十进制数字0也是“F0”

单个数字压缩0是x'0F'

然而,
分区(5,0)是x'f0f0'
包装(5,0)为x'00000 F'

因此,将_1视为char(15)x'f0f0f0f0'
AP_1被视为字符(9)x'00000 F00000F'


所以很容易看出,作为_1==*零,但作为_1*零

它是事物的组合

DS只是字节的集合,因为RPG没有字节类型,所以它基本上将其视为SBCS字符的集合

*零是一个符号名,它转换为一个重复的x‘F0’,表示比较/分配给变量的长度

字符“0”是x“F0”,分区十进制数字0也是“F0”

单个数字压缩0是x'0F'

然而,
分区(5,0)是x'f0f0'
包装(5,0)为x'00000 F'

因此,将_1视为char(15)x'f0f0f0f0'
AP_1被视为字符(9)x'00000 F00000F'


所以很容易看出,作为_1==*零,但AP_1*零

请不要因为我没有使用/免费而责骂我。我只是在修改旧代码。请不要因为我没有使用/免费而责骂我。我只是在修复旧代码。字符“0”和分区的十进制数字是x'F0,而不是x'0F。一个压缩的单个数字0是x'0F'而不是x'F0。@jmarkmurphy…你不是很挑剔吗?在我用F0替换所有0F之前,一切都是正确的p字符“0”和分区十进制数字是x'F0”,而不是x'0F。单个数字压缩0是x'0F'而不是x'F0。@jmarkmurphy…你不是很挑剔吗?在我用F0替换所有0F之前,一切都是正确的P