Same algorithm, same structure, no bitwise ops, less efficient, less readable:

```js
function stringRepeat(str, num) {
    var result = "";
    for (num = Math.min(num, Math.pow(2, 31) - 1); num > 0; num = Math.floor(num / 2), str += str) {
        if (num % 2 === 1) {
            result += str;
        }
    }
    return result;
}
```

I think it was the strategy confusing you, not the bitwise operations. As you can see here, this is no more readable. We shouldn't be afraid of bitwise operators when working with small integers, especially when doing so much doubling.