Bo Anders Svensson Posted November 19, 1999 Share Posted November 19, 1999 Fann vid testkörning att bitvisoperator prioriteten vid följande uttryck X Y fallerade där, X och Y är satser med ~, ^ och & operatorerna. Prioriteten skall vara ~, ^, & och med fallande prioritet. Skriver man däremot (X) (Y) så fungerar or-operatonr enligt specifikation. För den som är nyfiken på att testa vad det var jag testade på så var det följande logiska uttryck: ~(@sa & @ua) & @nis & 0x1 , (@SA & @UA) & ~(@id ^ @nis) & 0x1 När jag gorde or på dessa så blev resultatet: 0000 00 0 0001 10 0 0010 00 0 0011 10 0 0100 00 0 0101 10 0 0110 00 0 0111 10 1 1000 00 0 1001 10 0 1010 00 0 1011 10 0 1100 01 1 1101 00 0 1110 00 0 1111 01 1 Använder jag paranteser runt högeroperanden för or-operatorn får jag följande resultat: 0000 00 0 0001 10 1 0010 00 0 0011 10 1 0100 00 0 0101 10 1 0110 00 0 0111 10 1 1000 00 0 1001 10 1 1010 00 0 1011 10 1 1100 01 1 1101 00 0 1110 00 0 1111 01 1 Vilket är det resultat man förväntar sig att få.. Programmet jag körde för att testa med: declare @sa int declare @ua int declare @id int declare @nis int select @sa = 0 select @ua = 0 select @id = 0 select @nis = 0 while ((@sa & @ua & @id & @nis) = 0) begin select convert(char(1),@sa), convert(char(1),@ua), convert(char(1),@id), convert(char(1),@nis), convert(char(1), ~(@sa & @ua) & @nis & 0x1), convert(char(1), (@SA & @UA) & ~(@id ^ @nis) & 0x1), convert(char(1),~(@sa & @ua) & @nis & 0x1 (@SA & @UA & ~(@id ^ @nis)) & 0x1) select @nis = ~@nis & 0x1 if (@nis = 0) select @id = ~@id & 0x1 if (@nis = 0 and @id = 0) select @ua = ~@ua & 0x1 if (@nis = 0 and @id = 0 and @ua = 0) select @sa = ~@sa & 0x1 end select convert(char(1),@sa), convert(char(1),@ua), convert(char(1),@id), convert(char(1),@nis), convert(char(1), ~(@sa & @ua) & @nis & 0x1), convert(char(1), (@SA & @UA) & ~(@id ^ @nis) & 0x1), convert(char(1),~(@sa & @ua) & @nis & 0x1 (@SA & @UA & ~(@id ^ @nis)) & 0x1) Link to comment Share on other sites More sharing options...
Bo Anders Svensson Posted November 19, 1999 Author Share Posted November 19, 1999 Tydligen ramlade or-operatorn bort någonstans så här följer en errata; X Y skall vara X ! Y (X) (Y) skall vara (x) ! (Y) convert(char(1),~(@sa & @ua) & @nis & 0x1 (@SA & @UA & ~(@id ^ @nis)) & 0x1) skall vara convert(char(1),~(@sa & @ua) & @nis & 0x1 ! (@SA & @UA & ~(@id ^ @nis)) & 0x1) Där ! skall bytas mot pipe-tecknet. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.