【发布时间】:2016-12-17 15:21:12
【问题描述】:
我有这个 C 风格的程序:
void showOneByteBinaryNumber( char c ) {
for ( int i = 128; i >=1; i >>= 1 ) {
// Fixed Typo - Replaced a ; with the correct {
if ( c & i ) {
printf( "1" );
} else {
printf( "0" );
}
}
}
int main() {
for ( int i = 0; i < 256; i++ ) {
printf( "%3d = ", i );
showOneByteBinaryNumber( i );
printf( "\n" );
}
return 0;
}
然后我将我的程序更改为:
void showOneByteBinaryNumber( char c ) {
for ( int i = 128; i >= 1; i >>= 1 ) {
if ( c & i ) {
std::cout << 1;
}
else {
std::cout << 0;
}
}
}
int main() {
for ( int i = 0; i < 256; i++ ) {
std::cout << "%3d = " << i;
showOneByteBinaryNumber( i );
std::cout << "\n";
}
return 0;
}
我应该期望看到二进制值表从 0 增加到 255,但是当我尝试使用 std::cout 将其转换为 c++ 等效版本时,我得到的其他数字不是 0 或 1在输出中。
我不确定罪魁祸首是在更改的函数内还是在 main 内的 for 循环内。我不确定如何更改 printf() "%3d" 的参数;对std::cout做同样的事情
【问题讨论】:
-
std::cout << "%3d = "并没有按照你的想法去做。 -
if ( c & i );在 c 版本中缺少一个开头{ -
@sjsam 我修正了错字;请提请我注意;但这不是问题;我的编辑器中的代码是正确的
-
@FrancisCugler 也许您因为输入代码而不是从编辑器复制和粘贴到 SO 编辑窗口而被否决。
ShowOneByeBinaryNumber是什么?看,另一个错字。 -
@FrancisCugler 然后使用ideone.com 之类的东西(还有其他的)来验证您的代码。请注意,仍然将代码复制粘贴到 SO 问题中,而不是仅链接到 Web IDE 中的代码。