gpt4 book ai didi

c++ - C++ 中的位模式

转载 作者:行者123 更新时间:2023-11-30 04:13:36 24 4
gpt4 key购买 nike

我正在尝试输出 0-130 的位模式,但不知何故我只是在相应的位模式应该是的地方得到倒置的问号。代码的外观如下。有什么建议吗?

include <iostream>
using namespace std;

int isSet( unsigned int x, int i );
string bitsetfn(unsigned x, int nbits);

int main() {
for (int counter = 0; counter <=130; counter++){
cout << counter << " is: " << bitsetfn(counter,16)<<endl;
}
return 0;
}

string bitsetfn(unsigned x, int nbits){
string s=" ";
for(int j=0; j<nbits; j++) {
s+=isSet(x,j);
}
return s;
}

int isSet( unsigned int x, int i ) {
return ((x >> i) & 1);
}

输出应该是这样的...

0 is: 0000000000000000 
1 is: 0000000000000001
2 is: 0000000000000010
3 is: 0000000000000011
4 is: 0000000000000100
5 is: 0000000000000101
6 is: 0000000000000110
7 is: 0000000000000111
8 is: 0000000000001000
9 is: 0000000000001001
10 is:0000000000001010
11 is: 0000000000001011

最佳答案

建议 1:您可以使用 ostringstream 来构建您的字符串。

string bitsetfn(unsigned x, int nbits){
ostringstream oss;
for(int j=0; j<nbits; j++) {
oss << isSet(x,j);
}
return oss.str();
}

建议2:可以将二进制数字的整数值转换成其等价的字符编码。要求字符编码中的小数位从'0'开始连续连续,所以:

  s+=isSet(x,j) + '0';

将附加 '0''1'

建议 3:使用 bitset:

#include <iostream>
#include <bitset>
using namespace std;

int main() {
for (int counter = 0; counter <=130; counter++){
cout << counter << " is: " << bitset<16>(counter)<<endl;
}
return 0;
}

关于c++ - C++ 中的位模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19372174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com