Martin Pelikan <martin.peli...@gmail.com> napsal:
> I can't say anything more than 'this solved my problem', which was 
> 
> $ echo | awk '{ printf "%u\n", rshift(int("0xdeffffff"), 24) }' | bc -e
> 'obase=16' 
> FFFFFF80
> vs.
> $ echo | awk '{ printf "%u\n", rshift(int("0xdeffffff"), 24) }' | bc -e
> 'obase=16'    
> DE
> 
> I hope it starts a discussion (at least), but I don't really know what
> the correct way is to these problems.
> 
> --
> Martin Pelikan
> 

Hello Martin,

You reached int boundary, so You received minimal number possible. I do not 
think extending boundary is good solution (that way you will reach it soon 
again).
To demonstrate:
$ awk 'BEGIN { printf("%d\n","0x7fffffff") }'  
2147483647

$ awk 'BEGIN { printf("%d\n","0x80000000") }'  
$ awk 'BEGIN { printf("%d\n","0x80000001") }'  
$ awk 'BEGIN { printf("%d\n","0xffffffff") }'  
$ awk 'BEGIN { printf("%d\n","0xfeedbeef") }'  
$ awk 'BEGIN { printf("%d\n","0xfffffffffffff") }' 
-2147483648

In my point of view, You should solve the problem elsehow. For example 
splitting that big number to smaller or just trim last six characters (it 
depends on problem you have)

Best regards
-- 
Jakub TuD
ek/otaznik <ja...@otaznik.net>

Reply via email to