为什么我收到错误?对我来说这看起来很简单。另外,这是我做我想做的最好的方法吗?
#include <iostream>
#include <string>
int main() {
char j = "J";
std::cout << bitchar(j);
return 0;
}
std::string bitchar(char c) {
std::string s;
unsigned thisdivisor = (unsigned)c;
while (!thisdivisor) {
s += thisdivisor % 2 ? '0' : '1';
thisdivisor /= 2;
}
return s;
}
答案 0 :(得分:3)
#include <iostream>
#include <string>
#include <bitset>
int main() {
char j = 'J';
std::cout << std::bitset<8>(j);
return 0;
}
注意:
"J"
是一个单字符C风格的字符串(尾随\0
),
您应该'J'
使用char
。std::bitset
打印位模式。答案 1 :(得分:2)
尝试使用char j = 'j'
代替="j"
为您的变量指定一个字符。 “j”是一个字符串数组。
答案 2 :(得分:2)
尝试char j = 'J'
,正如@losifM所说。双引号定义了一个字符数组,你正在寻找一个单一的字符(单引号)。
更好的方法是使用std::bitset
,然后使用cout
对其进行流式传输。
//Add this
#include <bitset>
char j = 'j';
std::bitset<8> x(j);
std::cout << x;
此时应该是自我解释,但这可能有所帮助:How to print (using cout) the way a number is stored in memory?
s += thisdivisor % 2 ? '0' : '1';
也应该是
s += thisdivisor % 2 ? '1' : '0';
因为如果thisdivisor % 2
返回1
(true
),您希望它将1
添加到s,反之亦然。
答案 3 :(得分:2)
您忘了描述错误。据推测它就像
‘bitchar’ was not declared in this scope
因为在main
中调用它之前没有声明该函数。在bitchar
之前移动main
的定义,或在main
之前或之内添加声明:
std::string bitchar(char c);
然后你可能会得到类似的东西:
invalid conversion from ‘const char*’ to ‘char’
因为您正在尝试将字符串文字"J"
分配给字符变量。使用字符文字'J'
(带单引号)代替。
然后你会发现你没有得到任何输出。这是因为只要值为零,while (!thisdivisor)
就会循环;因此,如果给它一个非零值,它将不会循环。您希望while (thisdivisor)
(或while (thisdiviser != 0)
,如果您想要更明确),在 零时循环。
然后你会发现这些位是反转的;如果模数结果为零,你想要'0',而如果不零你的测试给'0':
s += thisdivisor % 2 ? '1' : '0';
或
s += (thisdivisor % 2 == 0) ? '0' : '1';
最后,您可能想要反转字符串(或通过前置而不是附加来构建它)以获得更常规的最重要位优先排序。
答案 4 :(得分:1)
您正在将char数组(衰减到指针)分配给char(J)。 然后用char初始化std :: string(应该是c-string)。