繁体   English   中英

修改uint32_t变量的位

[英]modify bits of uint32_t variable

我有一个uint32_t变量,我想随机地修改前10个低有效位(0-9),然后仍然随机地,我想要将第10位修改为第23位。 我用C ++编写了这个简单的程序,它仅适用于前10位,而不适用于其他位。 我不明白为什么

#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;

这是翻转随机位的示例:

int main(void)
{
  srand(time());
  unsigned int value = 0;
  for (unsigned int iterations = 0;
       iterations < 10;
       ++iterations)
  {
    unsigned int bit_position_to_change = rand() % sizeof(unsigned int);
    unsigned int bit_value = 1 << bit_position_to_change;
    value = value ^ bit_value;  // flip the bit.
    std::cout << "Iteration: " << iterations
              << ", value: 0x" << hex << value
              << "\n";
  }
  return EXIT_SUCCESS;
}

operator ^表示的异或功能非常适合翻转位。

另一种方法是替换位:

unsigned int bit_pattern;
unsigned int bit_mask; // contains a 1 bit in each position to replace.
value = value & ~bit_mask;  // Clear bits using the mask
value = value | bit_pattern;  // Put new bit pattern in place.

抱歉,我更加耐心地解决了我的问题。

我的意思是这样的:

    uint32_t initval;

    uint32_t address(1023);
    bitset<32> bits(address);
    cout << bits.to_string() << endl;

    uint32_t value(16383);
    value<<=10;
    bitset<32> bitsvalue(value);
    cout << bitsvalue.to_string() << endl;

    initval = address | value;
    bitset<32> bitsinit(initval);
    cout << bitsinit.to_string() << endl;

    return 0;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM