I came accross this function to mint token for a crowdsale but I don't understand the meaning of the bit shift operations and what bit array should represent.. what is this code doing ? The code can be found here: https://github.com/bokkypoobah/ZeroSumCrowdsaleContractAudit/blob/9fe4765a0a0394a476a618608a4914754651ce59/contracts/Ledger.sol#L290
The function is this one:
function multiMint(uint nonce, uint256[] bits) onlyOwner {
require(!mintingStopped);
if (nonce != mintingNonce) return;
mintingNonce += 1;
uint256 lomask = (1 << 96) - 1;
uint created = 0;
for (uint i=0; i<bits.length; i++) {
address a = address(bits[i]>>96);
uint value = bits[i]&lomask;
balanceOf[a] = balanceOf[a] + value;
controller.ledgerTransfer(0, a, value);
created += value;
}
totalSupply += created;
}