q語言的資料型別

lt發表於2016-07-07

所有資料都是由原子組成的,下面列出q語言與其他語言資料型別的比較:

Q SQL Java C#  
boolean boolean Boolean Boolean  
byte byte Byte Byte  
short smallint Short Int16  
int int Integer Int32  
long bigint Long Int64  
real real Float Single  
float float Double Double  
char char(1) Character Char  
symbol varchar (String) (String)  
date date Date  
datetime datetime Timestamp !DateTime  
minute    
second    
time time Time !TimeSpan  
enumeration 

每種型別都有固定的大小和字元與數字的記號:

型別 大小 字元 數字 表示法 null值  
boolean 1 b 1 1b  
byte 1 x 4 0x26 0x00  
short 2 h 5 42h 0Nh  
int 4 i 6 42 0N  
long 8 j 7 42j 0Nj  
real 4 e 8 4.2e 0Ne  
float 8 f 9 4.2 0n  
char 1 c 10 "z" " "  
symbol * s 11 `zaphod `  
month 4 m 13 2006.07m 0Nm  
date 4 d 14 2006.07.21 0Nd  
datetime 4 z 15 2006.07.21T09:13:39 0Nz  
minute 4 u 17 23:59 0Nu  
second 4 v 18 23:59:59 0Nv  
time 4 t 19 09:01:02:042 0  
enumeration   * `u$v  
dictionary   99 `a`b`c!10 20 30  
table   98 ([] c1:`a`b`c; c2:10 20 30) 

下面舉例:

q)a:1 //不加限定整數1
q)type a //型別是長整型long
-7h
q)b:1i  //限定是整型int
q)type a //型別是整型int
-6h
q)a:1h //限定是短整型short
q)type a //型別是整型short
-5h
q)b:0x20 //16進製表示byte型別
q)b
0x20
q)type b //型別是位元組型別byte
-4h
q)f:1f   //限定是浮點型float
q)f
1f
q)type f
-9h

從上面用法看到,字元記號用於數字字尾,這與c語言類似。而type命令能夠返回數字的型別記號。
不同資料型別的資料,在能夠互相轉換的時候可以作比較,返回值是布林型的1或0:

q)a
1h
q)b
1i
q)a=b
1b
q)a=f
1b

但用於運算子的引數時,不能自動轉換,而必須顯式強制轉換型別:

q)til a
,0
q)til f
k){$[0>@x;!x;'`type]}
'type
!:
1f
q.q))  //2個)提示符表示進入除錯模式,可以檢視出錯時變數的值
q.q))x
1f
q.q))\  //\退出一層
q)til "h"$1f
,0

相關文章