簡體   English   中英

q 和 kh 中的 NULL

[英]NULLs in q and in k.h

我發現khq之間的h NULL 值不同:

q)0x00 vs 0W
0x7fffffffffffffff
q)0x00 vs 0N
0x8000000000000000
q)0x00 vs 0Ni
0x80000000
q)0x00 vs 0Wi
0x7fffffff
q)0x00 vs 0Wh
0x7fff
q)0x00 vs 0Nh
0x8000

q看起來很熟悉,但在kh nh似乎很奇怪:

// nulls(n?) and infinities(w?)
#define nh ((I)0xFFFF8000)
#define wh ((I)0x7FFF)
#define ni ((I)0x80000000)
#define wi ((I)0x7FFFFFFF)
#define nj ((J)0x8000000000000000LL)
#define wj 0x7FFFFFFFFFFFFFFFLL

為什么nh(I)0xFFFF8000值? - 為什么他們不簡單地輸入(H)0x8000

我懷疑額外的位用於表示解釋器或虛擬機內的空值,以將其與短值 0x8000 區分開來。 使用額外的位來存儲非整數值允許充分利用 16 位來表示整數。 這避免了必須將 0x8000 位模式提升為 32 位值,並且可以更有效地存儲和處理短褲列表。

當您使用vs轉換為二進制時,它看起來像是強制 16 位輸出,屏蔽了特殊位。 但是,這不是特殊值的內部二進制表示,您可以使用0b作為第一個參數看到它。 例如:

q)0b vs 0W
0111111111111111111111111111111111111111111111111111111111111111b

我無法訪問 aq 提示來嘗試0Nh但您可以嘗試使用它。

這都是推測性的,因為我對 q 實現沒有任何特殊知識,但我已經構建了幾個解釋器和 VM,這對我來說很有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM