docs: public void lshiftMe(int c) throws IllegalArgumentException
  	{
  		if (c <= 0)
  		{
  			if (c == 0)
  				return; // silly.
  			else
  				throw new IllegalArgumentException("negative shift count");
  		}
  		int wordcount = c >> 5;
  		int bitcount = c & 0x1f;
  		int anticount = 32 - bitcount;
  		int t[] = data;
  		int s[] = data;
  		if (nWords + wordcount + 1 > t.length)
  		{
  			// reallocate.
  			t = new int[nWords + wordcount + 1];
  		}
  		int target = nWords + wordcount;
  		int src = nWords - 1;
  		if (bitcount == 0)
  		{
  			// special hack, since an anticount of 32 won't go!
  			System.arraycopy(s, 0, t, wordcount, nWords);
  			target = wordcount - 1;
  		}
  		else
  		{
  			t[target--] = s[src] >>> anticount;
  			while (src >= 1)
  			{
  				t[target--] = (s[src] << bitcount) | (s[--src] >>> anticount);
  			}
  			t[target--] = s[src] << bitcount;
  		}
  		while (target >= 0)
  		{
  			t[target--] = 0;
  		}
  		data = t;
  		nWords += wordcount + 1;
  		// may have constructed high-order word of 0.
  		// if so, trim it
  		while (nWords > 1 && data[nWords - 1] == 0)
  			nWords--;
  	}