infinint left shift operation

Wesley Leggette <lists-+42/j/[email protected]> Tue, 21 Jun 2005 21:15:19 +0200
Newsgroups gmane.comp.sysutils.backup.dar.general
Message-ID <1119381319.29973.6.camel@localhost>

Hi,

When using the "operator <<=" I'm getting weird results:


[ libdarc code ]

extern "C" void dar_infinint_shiftl( dar_infinint** a, dar_infinint* b )
{
	infinint* ar = (infinint*)*a;
	infinint* br = (infinint*)b;
	*ar <<= *br;
}

extern "C" void dar_infinint_shiftli( dar_infinint** a, int bit )
{
	infinint* ar = (infinint*)*a;
	*ar <<= bit;
	//*a = (dar_infinint*)ar;
}


I call the equivalent of dar_infinint_shiftl(4, 1), getting the
following results:

a original = 4
b original = 1
value = 2048

Both operators return incorrect values.


I also get:

a original = 1000
b original = 1
value = 512000


Right shift seems to work okay.


Thanks.



-- 
Wesley Leggette <lists-+42/j/[email protected]>

GPG Key:         http://www.kaylix.net/kaylix.asc or http://pgp.mit.edu
GPG Fingerprint: 9B6F 19FB 5296 5E6C 21FE  7614 2A20 5688 F848 9BDD
signature.asc (application/pgp-signature, 189 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1 (GNU/Linux)

iD8DBQBCuGdHKiBWiPhIm90RAmBgAJkBWNbO5Sj/spXWPiNRlMc25zSvxACgrcyX
p0mctT25IKcyh1IMMdwUPaE=
=Lgdu
-----END PGP SIGNATURE-----