Самый простой способ получить такую вещь - использовать побитовые операторы. В основном:
var int = 224
var n = 8
var i = 0
var total = 0
while (i++ < n) {
var mask = 1 << i
if ( (mask & int) == (mask)) {
total++
}
}
В основном mask
- это переменная, равная 1 в одном месте и 0 во всех других местах, например 0001000
со старшим битом в позиции i
.
mask & int
- все ноль, если i
бит целого числа равен 0, равно маске, если оно равно 1.
РЕДАКТИРОВАТЬ: я дал несколько попыток на консоли. Прежде всего я избавился от разрыва, затем добавил несколько скобок в операторе if. Вероятно, некоторые проблемы с представлением чисел сделали невозможным утверждение, чтобы оно было верным.