У меня есть переменная uint32_t, и я хочу изменить randombly первые 10 менее значимых бит (0-9), а затем, по-прежнему произвольно, я хочу изменить биты с 10-го по 23-й. Я написал эту простую программу на C++ и работает для первых 10 бит, но не для остальных. Я не могу понять, почемуизменить бит переменной uint32_t
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <iostream>
#include <math.h>
using namespace std;
void printuint(uint32_t value);
int main(){
uint32_t initval=0xFFFFFFFF;
uint32_t address;
uint32_t value;
uint32_t final;
address=rand()%1024;
address<<=23;
printf("address \n");
printuint(address);
printf("final\n");
final = (initval & address);
printuint(final);
return 0;
}
void printuint (uint32_t value){
while (value) {
printf("%d", value & 1);
value >>= 1;
}
cout<<endl;
}
Добавление этого
value = rand() % 16384;
printuint(value);
и необходимости модифицировать final = (initval & address) & value;
Это немного сбивает с толку - где вы добавляете код после того, как «Добавление этого»? Каковы ожидаемые и фактические результаты (используйте тестовые числа вместо rand())? – ysap
Функция 'printuint()' печатает биты в порядке lsb-on-left. Обычно вы ставите lsb справа. Это то, что вы действительно хотите? Кроме того, из-за сдвига влево на 23 бит, вы получите серию ведущих нулей перед вашим фактическим 10-битным числом. – ysap
Вы просто пропустили семя генератора псевдослучайных чисел, вызывающего ['srand()'] (http://stackoverflow.com/questions/4926622/how-to-generate-different-random-number-in-a-loop -в-с)? –