/* Converts the unsigned integer k to binary character form with a blank
after every fourth digit. Result is in string s of length 39. Caution:
If you want to save the string, you must move it. This is intended for
use with printf, and you can have only one reference to this in each
printf statement. */
char * binary(unsigned k) {
int i, j;
static char s[40] = "0000 0000 0000 0000 0000 0000 0000 0000";
j = 38;
for (i = 31; i >= 0; i--) {
if (k & 1) s[j] = '1';
else s[j] = '0';
j = j - 1;
k = k >> 1;
if ((i & 3) == 0) j = j - 1;
}
return s;
}
我已经用c ++测试了它
#include <iostream>
using namespace std;
char *binary(unsigned k){
int i, j;
static char s[40]="0000 0000 0000 0000 0000 0000 0000 0000";
j=38;
for (i=31;i>=0;i--){
if (k & 1) s[j]='1';
else s[j]='0';
j=j-1;
k=k>>1;
if ((i & 3)==0) j=j-1;
}
return s;
}
int main(){
unsigned k;
cin>>k;
*binary(k);
return 0;
}
但是k有什么价值?例如我输入了127,但它返回0为什么?
答案 0 :(得分:7)
你丢弃了函数binary
的返回值:
*binary(k);
binary
返回char *
,这是(正如文档所述)“打算与printf一起使用”,但是你没有对这个字符串做任何事情。你的程序'返回'0,因为那是你最后一行代码明确返回的内容!
尝试更改
*binary(k);
到
cout << binary(k);
你应该至少看到一些输出。
答案 1 :(得分:1)
变化:
cin>>k;
*binary(k);
为:
cin >> k;
cout << binary(k) << endl;
答案 2 :(得分:1)
也许你应该打印出二进制字符串?
unsigned k;
cin >> k;
cout << binary(k) << endl;
答案 3 :(得分:1)
请尝试使用此C ++代码:
#include <iostream>
using namespace std;
char *binary(unsigned k){
int i, j;
static char s[40]="0000 0000 0000 0000 0000 0000 0000 0000";
j=38;
for (i=31;i>=0;i--) {
if (k & 1) s[j]='1';
else s[j]='0';
j=j-1;
k=k>>1;
if ((i & 3)==0)
j=j-1;
}
return s;
}
int main(){
unsigned k;
cin>>k;
cout << k << " : " << binary(k) << endl;
return 0;
}
请注意,此行已更改:
cout << *binary(k);
答案 4 :(得分:0)
应该如此。我并不熟悉C ++,但基础知识仍然相同。 *binary
函数将值返回给上一个函数,它不会返回整个页面的值。
例如:
k = myFunction();
return 0;
您的myFunction
被执行并且返回的值被设置到变量k
中,然后它继续执行该函数的其余部分并返回0
。