docs: function bitop(operation, destkey /* key1, keyN, req */) {
    var keys = slice.call(arguments, 2)
      , req = typeof keys[keys.length - 1] === 'object' ? keys.pop() : null
      , buffers = []
      , plen
      , ind
      , len = 0
      , out
      , buf
      , byte
      , i
      , j
      , v;
  
    // unary operation, ensure keys length is one
    if(operation === BITOP.NOT) {
      keys = keys.slice(0, 1);
    }
  
    for(i = 0;i < keys.length;i++) {
      v = this.getKey(keys[i], req);
      if(v === undefined) {
        buffers.push(EMPTY);
      }else if(typeof v === 'number') {
        buffers.push(new Buffer([v]));
      }else if(typeof v === 'string') {
        buffers.push(new Buffer(v));
      /* istanbul ignore else: not testing unsupported types */
      }else if(Buffer.isBuffer(v)) {
        buffers.push(v);
      }
  
      // last buffer added, used to get longest buffer length
      buf = buffers[buffers.length - 1];
  
      // previous length so we can get index of longest buffer
      plen = len;
  
      // calculate longest buffer length
      len = Math.max(len, buf.length);
  
      // find index of longest buffer
      if(len > plen) {
        ind = buffers.length - 1;
      }
    }
  
    // use the longest one as the start buffer
    // and copy so as not to modify the original
    // key data if it was already a buffer
    buf = buffers.splice(ind, 1)[0];
    out = new Buffer(buf);
  
    // give us something for the outer loop to
    // iterate over
    if(operation === BITOP.NOT) {
      buffers.push(out);
    }
  
    for(i = 0;i < buffers.length;i++) {
      buf = buffers[i];
      for(j = 0;j < out.length;j++) {
        if(operation === BITOP.NOT) {
          out[j] = ~out[j];
          continue;
        }
        byte = j < buf.length ? buf[j] : 0;
        switch(operation) {
          case BITOP.AND:
            out[j] &= byte;
            break;
          case BITOP.OR:
            out[j] |= byte;
            break;
          case BITOP.XOR:
            out[j] ^= byte;
            break;
        }
      }
    }
  
    if(len) this.setKey(destkey, out, undefined, undefined, undefined, req);
    return len;
  }