Ich möchte eine 16-Bit-Zahl mit mehreren gesetzten Bits eingeben und eine Zahl zurückgeben, bei der nur eines der Bits gesetzt ist. Geben Sie also 011 ein und geben Sie zufällig entweder 010 oder 001 aus, oder geben Sie 111 ein und erhalten Sie entweder 100, 010 oder 001. Der Kontext ist, dass ich versuche, einen Angriff zufällig mehrere Statuseffekte verursachen zu lassen, ohne Sonderfälle dafür ausführen zu müssen, was ärgerlich und repetitiv wäre.
Diese Lösung scheint immer nur 1 auszugeben, was nicht das ist, was ich will.
Code: Select all
u_int16_t setRandomBit(u_int16_tnumber) {
int bit_to_set = randomRange(1, __builtin_popcount(number));// popcount is the amount of set bits
int counter = 0;
for (int i = 0; i < 16; i++) {
if ((number >> i) && 1) {// if the bit is set
counter -= 1;
if (counter != bit_to_set) {
number = number && ~(1