DCL 1 SYM_TAB BASED(SYM_PTR), 2 ATTR BIT(18), SUBSTR(WK_OFF->ATTR,7,1) = '1'B ;赋值语句 运行完后, ATTR 的码值 变成多少了?
时间: 2024-02-10 11:34:24 浏览: 27
根据赋值语句可以知道,如果WK_OFF->ATTR的第7个字符为'1',则将ATTR的第18位设置为1。因为ATTR是一个18位的二进制位字段,所以在赋值之前,ATTR的所有位都是0。如果WK_OFF->ATTR的第7个字符为'1',则将第18位设置为1,否则不做任何修改。因此,如果WK_OFF->ATTR的第7个字符为'1',赋值语句执行后ATTR的码值将变为二进制的100000000000000000,即十进制的262144。如果WK_OFF->ATTR的第7个字符不为'1',ATTR的码值仍然为0。
相关问题
SUBSTR(WK_OFF->ATTR,7,1) = '1'B ; DCL 1 SYM_TAB BASED(SYM_PTR), 2 ATTR BIT(18),
这是一段IBM AS/400的RPG IV程序语言的代码。它的功能是判断从SYMBOL TABLE中读取的WK_OFF变量的第7个字符是否为'1',如果是,则将SYMBOL TABLE中的ATTR变量的第18位设置为1。其中,DCL关键字用于声明变量,1表示变量的层级,SYM_TAB是变量名,BASED关键字指定了变量的基地址,ATTR是一个18位的二进制数,BIT(18)表示这是一个18位的二进制位字段。
DCL ATTR BIT(18); SUBSTR(WK_OFF->ATTR,7,1) = '1'B ; 为什么值是 00 08 00 00
根据 PL/1 中 BIT(n) 的定义,BIT(18) 表示一个长度为 18 位的位字符串(bit string),可以存储 0 或 1。在代码中,SUBSTR(WK_OFF->ATTR, 7, 1) = '1'B 语句设置 ATTR 变量的第 7 位为 1。
由于 BIT(n) 类型的变量在内存中以字节为单位存储,因此 BIT(18) 类型的变量需要占用 3 个字节。在大多数计算机中,一个字节由 8 个二进制位组成,因此 BIT(18) 类型的变量需要占用 24 个二进制位。
在这个例子中,ATTR 变量的值为 00 08 00 00。这个值是由 3 个字节组成的,从左到右分别是:
- 00:表示二进制数 0000 0000。
- 08:表示二进制数 0000 1000。
- 00:表示二进制数 0000 0000。
由于我们只设置了 ATTR 变量的第 7 位为 1,因此其他二进制位的值都是 0。因此,ATTR 变量的值在二进制下可以表示为 0000 0000 0000 1000 0000 0000,即二进制数 32768,也可以表示为十六进制数 0x8000。