var q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,q1,w1,e1,r1,t1,y1,u1,i1,o1,p1,a1,s1,d1,f1,g1,h1,j1,k1,l1,z1,c1 : Integer;
begin
q:=bit_00.Value; w:=bit_01.Value; e:=bit_02.Value; r:=bit_03.Value; t:=bit_04.Value; y:=bit_05.Value; u:=bit_06.Value;
i:=bit_07.Value; o:=bit_08.Value; p:=bit_09.Value; a:=bit_10.Value; s:=bit_11.Value; d:=bit_12.Value; f:=bit_13.Value;
g:=bit_14.Value; h:=bit_15.Value; j:=bit_16.Value; k:=bit_17.Value; l:=bit_18.Value;
Bitmaska.Value:=Abs(q)*Power(2,0)
+Abs(w)*Power(2,1)
+ 0*Power(2,2)
+ 0*Power(2,3)
+Abs(e)*Power(2,4)
+Abs(r)*Power(2,5)
+Abs(t)*Power(2,6)
+Abs(y)*Power(2,7)
+Abs(u)*Power(2,8)
+Abs(i)*Power(2,9)
+Abs(o)*Power(2,10)
+ 0*Power(2,1)
+ 0*Power(2,12)
+Abs(p)*Power(2,13)
+ 0*Power(2,14)
+ 0*Power(2,15)
+ 0*Power(2,16)
+ 0*Power(2,17)
+Abs(a)*Power(2,18)
+ 0*Power(2,19)
+ 0*Power(2,20)
+Abs(s)*Power(2,21)
+Abs(d)*Power(2,22)
+Abs(f)*Power(2,23)
+Abs(g)*Power(2,24)
+Abs(h)*Power(2,25)
+Abs(j)*Power(2,26)
+Abs(k)*Power(2,27)
+Abs(l)*Power(2,28)
+0*Power(2,29)
+0*Power(2,30)
+0*Power(2,31) ;
Bitmaska.Value shr 1;
внешние биты стали правильно записываться в маску, только при присвоении их через промежуточные локальные переменные
значения должны быть взяты по модулю (потому что экспериментальным путем было замечено, что в них вместо значения 1, записывалось -1)
и в конце сдвиг регистра вправо на 1 бит.