- 論壇徽章:
- 0
|
本帖最后由 niuhua77 于 2011-09-19 15:38 編輯
引子:
前幾天有人問(wèn)到:同一個(gè)QAPI中的同一個(gè)參數(shù),為什么有的定義成Binary(4),而有的定義成Integer(10),并且二者皆出自IBM 官方的red book。IBM應(yīng)該不會(huì)出現(xiàn)烏龍吧?
比如說(shuō)下面的QAPI:
Create User Space (QUSCRTUS) API
Required Parameter Group:
1 Qualified user space name Input Char(20)
2 Extended attribute Input Char(10)
3 Initial size Input Binary(4)
4 Initial value Input Char(1)
5 Public authority Input Char(10)
6 Text description Input Char(50)
另一種定義版本:
Create User Space (QUSCRTUS) API
1 Qualified user space name Input Char(20)
2 Extended attribute Input Char(10)
3 Initial size Input Integer(10)
4 Initial value Input Char(1)
5 Public authority Input Char(10)
6 Text description Input Char(50)
我非常遺憾的告訴大家,IBM沒(méi)有犯這么低級(jí)的錯(cuò)誤,實(shí)際上二者是等價(jià)的?紤]到可能有像我一樣的新手存在疑惑,下面就解釋一下二者為什么等價(jià)。
首先說(shuō)明一下各種數(shù)據(jù)類型,不同的數(shù)據(jù)長(zhǎng)度所占的字節(jié)數(shù)(根據(jù)red book,不要問(wèn)我why):
數(shù)據(jù)類型 字節(jié)與位數(shù)的關(guān)系 取值范圍
B(Binary): 2bytes能表示4位數(shù) -9999 ~ 9999
4bytes能表示9位數(shù) -999 999 999 ~ 999 999 999
I(Integer): 1bytes能表示3位數(shù) -128 ~ 127
2bytes能表示5位數(shù) -32768 ~ 32767
4bytes能表示10位數(shù) -2147483648 ~ 2147483647
8bytes能表示20位數(shù)
U(Unsigned): 1bytes能表示3位數(shù) 0 ~ 255
2bytes能表示5位數(shù) 0 ~ 65535
4bytes能表示10位數(shù) 0 ~ 4294967295
8bytes能表示20位數(shù) 0 ~ 18446744073709551615
P(Packed): 1bytes能表示1位數(shù) -9~9
2bytes能表示3位數(shù) -999 ~ 999
3bytes能表示5位數(shù) -99999 ~ 99999-
4bytes能表示7位數(shù) -9999999 ~ 9999999
…………
S(Zone): 1bytes能表示1位數(shù) -9 ~ 9
2bytes能表示2位數(shù) -99 ~ 99
3bytes能表示3位數(shù) -999 ~ 999
4bytes能表示4位數(shù) -9999 ~ 9999
…………
之所以說(shuō)B(4)=I(10)是等價(jià)的,主要從兩方面考慮,各自所占字節(jié)數(shù)和各自的取值范圍。
1 所占字節(jié):B(4)=4bytes ,I(10)=4bytes 二者相等。
疑問(wèn):其他的數(shù)據(jù)類型也有占4bytes的[U(10)、P(7)、S(4)],為什么不能和B(4)等價(jià)呢?接著往下看:
2 取值范圍:B(4): -999 999 999 ~ 999 999 999
I(10): -2 147 483 648 ~ 2 147 483 647
I(10)的取值范圍完全包含B(4)的取值范圍,從這兩點(diǎn)上看,B(4)和I(10)是等價(jià)的。
下面再回答上面的疑問(wèn):
B(4)的取值范圍并不能完全包含于U(10)、P(7)、S(4),總有一部分?jǐn)?shù)值無(wú)法取得,所以B(4)不能與U(10)、P(7)、S(4)等價(jià)
以上就是Binary(4)與Integer(10)等價(jià)的原因啦。
注釋1:
不過(guò)以Initial size Integer(10)這個(gè)參數(shù)為例,B(4)實(shí)際上又等價(jià)與U(10),因?yàn)镮nitial size這個(gè)參數(shù)必須是大于0的(The initial size of the user space being created. This value must be from 1 byte to 16, 776, 704 bytes),B(4)的取值范圍實(shí)際上是:1 ~ 999 999 999,而U(10)的取值范圍:0 ~ 4294967295,遠(yuǎn)遠(yuǎn)超過(guò)999 999 999了,所以B(4)與I(10)也是等價(jià)的。
這個(gè)例子就是想告訴大家,QAPI的參數(shù)定義是很靈活的東西,不一定非得按部就班,熟悉個(gè)中緣由之后,自己可以根據(jù)實(shí)際需要,靈活的定義數(shù)據(jù)類型。
注釋2:
有同學(xué)問(wèn),那B(8]等價(jià)于I(20)咯??
答案:NO!!
因?yàn)槎M(jìn)制數(shù)據(jù)僅有B(2) B(4)兩種,不存在B(1) B(3) B(8]等。系統(tǒng)會(huì)根據(jù)數(shù)據(jù)的位數(shù)自動(dòng)分配2byte(4位數(shù))和4bytes(5-9位數(shù))。過(guò)9位數(shù)的話,系統(tǒng)會(huì)反白提示錯(cuò)誤。
請(qǐng)大家選擇性的參考,歡迎指正。 |
|