来自黑客的代码令人高兴

时间:2010-07-15 07:28:24

标签: c++

/* 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为什么?

5 个答案:

答案 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