/* Model C shift primitives */ use Array:all; use Math:all; use SimplePrint:all; int SRL(int k, int v) { /* Shift right logical v by k bits */ /* k>0 */ divisors=[1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768,65536,131072,262144,524288,1048576,2097152,4194304,8388608,16777216,33554432,67108864,134217728,268435456,536870912,1073741824,2147483648]; z = v/divisors[k]; return(z); } int main() { v = [-3,-2,-1,0,1,2,3,255]; z= print(v); shifts =[0,1,2,8]; v2 = with(. <= iv <= .) genarray(shape(v), with(. <= k <= .) genarray(shape(shifts), SRL(k[0], v[iv]))); z+= print(v2); return(z); }