記得以前在將c++的標頭檔案時候在結構體中有個成員是位域定義,說白了就是將乙個位元組中的每一位代表什麼意思,比如第3位如果為1的話代表代表資料有效,反之為0就是資料無效.
當時沒有辦法就直接定義乙個位元組吧,在使用的時候先讀出這個位元組然後用與運算來判斷吧.
最近困在襄樊和河南的乙個交界處,偏僻呀,不過也好,沒事幹的時候可以看看**吧.
其實在很早之前看jedi中翻譯的pas檔案時候就看到過用set來表示位域的,當時沒有怎麼在意,今天在看objauto單元的時候,測試的時候有點兒新的發現:
//引數的傳值方式
//tparamflag = (pfvar, pfconst, pfarray, pfaddress, pfreference, pfout,
pfresult);
tparamflags = set of tparamflag;
這是集合定義部分.然後我們看看我們的**吧.
procedure tform3.btn1click(sender: tobject);
var p: tparamflags;
begin
p:=[pfreference];
p:=[pfvar, pfconst, pfarray, pfaddress, pfreference, pfout,
pfresult];
end;
如果我們用ord(pfvar)只能得到0,而且delphi的提示裡面也是顯示的0.但是這裡是用括起來的.那麼值有沒有變化呢?
我們看見eax是$10也就是00010000,這就是[pfreference]的值.光pfreference是他是4,但是用到集合後他就變成了二進位制的第五位是1也就是16.
也就是在集合中,每乙個元素佔一位,元素與元素之間用or連線起來組成乙個數.
那麼乙個集合會有多大呢?其實和它有多少個元素有關係,大小應該整除8 + 1吧.看例子:
在上面的例子中加一句
showmessage(inttostr(sizeof(p)));
結果是1,因為tparamflag 中只有7個元素.
那麼我們自己定義乙個元素多一點兒的集合來看看吧,
type
ttest = (t1,t2,t3,t4,t5,t6,t7,t8,t9);
ttests = set of ttest;
procedure tform3.btn4click(sender: tobject);
var t:ttests;
begin
showmessage(inttostr(sizeof(t)));
end;
現在結果就是2了.
說了這麼多,最後就是在結構體或者其他時候要判斷某一位是否為一我們只需要
if t1 in t then
如果是true那麼第0位就是1了.
好了要說的就是這麼多了.
跨域解決辦法
解決跨域 本文通過設定access control allow origin來實現跨域。例如 客戶端的網域名稱是client.runoob.com,而請求的網域名稱是server.runoob.com。如果直接使用ajax訪問,會有以下錯誤 no access control allow origi...
跨域解決辦法
什麼是跨域 協議 主網域名稱 子網域名稱 埠有乙個不相同即跨域。如 在www.test.com 請求 www.abc.com下的介面 主網域名稱不同 在www.test.com 請求 m.test.com下的介面 主網域名稱不同 在www.test.com 請求 www.test.com 81下的介...
spring boot跨域解決辦法
專案中經常會遇到前後端分離的情況,分離之後會碰到跨域問題,前端無法訪問後端的介面。可以通過如下3種方式解決跨域問題。public class corsfilter implements filter override public void dofilter servletrequest servl...