求救两道C/C++面试题

shunzi__1984 2008-09-10 07:53:06
问题1:((int&)a 这是什么意思,怎么从没见过?写出输出结果,并附上解释)
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?
float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么?

问题2:找出程序中的问题

char str[] = "I love 中国";

for( size_t i=0; i<strlen(str); ++i )
char2Hex( str[i] );
cout << endl;

void char2Hex( char c ) // 将字符以16进制表示
{
char ch = c/0x10 + '0'; if( ch > '9' ) ch += ('A'-'9'-1);
char cl = c%0x10 + '0'; if( cl > '9' ) cl += ('A'-'9'-1);
std::cout << ch << cl << ' ';
}
...全文
141 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ysysbaobei 2008-09-10
  • 打赏
  • 举报
回复
修改6楼在 turboc 2.0下使用


void char2Hex(char c ) /*将字符以16进制表示*/
{
unsigned char ch,cl;
if(!(c & 0x80))
{
ch = c/0x10 + '0'; if( ch > '9' )
ch += ('A'-'9'-1);
cl = c%0x10 + '0'; if( cl > '9' )
cl += ('A'-'9'-1);
printf("%c%c",ch,cl);
}
else
{
ch=c;
printf("%c",ch);
}
}
void main()
{
int i;
char str[] = "I love 中国";

for(i=0; i <strlen(str); ++i )
char2Hex( str[i] );
printf("\n");
}



运行结果最后也时乱码,估计时turboc2.0不支持汉字的原因
ysysbaobei 2008-09-10
  • 打赏
  • 举报
回复

#include "stdlib.h"
void char2Hex( char c ) /* 将字符以16进制表示*/
{
unsigned char ch,cl;
ch = c/0x10 + '0'; if( ch > '9' ) ch += ('A'-'9'-1);
cl = c%0x10 + '0'; if( cl > '9' ) cl += ('A'-'9'-1);
printf("%c%c",ch,cl);
}

main()
{
int i;
unsigned char str[] = "I love 中国";
for(i=0; i <strlen(str); i++)
char2Hex(str[i]);
printf("\n");
}


运行结果:49206c6f766520.&-0,)0*
编译环境:turboc 2.0
ysysbaobei 2008-09-10
  • 打赏
  • 举报
回复
mark 学习一下
fengyizi 2008-09-10
  • 打赏
  • 举报
回复
int(&a)是求a的地址。
第二个用wchar_t行吗?
帅得不敢出门 2008-09-10
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int main()
{
float a = 1.0f;
cout << (int)a << endl; //输出为1,因为用了转换,编译器帮你弄好了float与int的转换表示取整1
cout << (int&)a << endl; //输出1065353216 这里强制把float内存里的内容看成是int型数据,由于浮点的特殊
//表示 符号位 8位阶码 23位尾符, 这样(int&)就变成很大了.
return 0;
}
第二个用unsigned char



wangdeqie 2008-09-10
  • 打赏
  • 举报
回复

//问题1,不说了,搜搜以前的帖子
//问题2,可以这么写
#include <iostream>
using namespace std;

void char2Hex(char c ) // 将字符以16进制表示
{
unsigned char ch,cl;
if(!(c & 0x80))
{
ch = c/0x10 + '0'; if( ch > '9' )
ch += ('A'-'9'-1);
cl = c%0x10 + '0'; if( cl > '9' )
cl += ('A'-'9'-1);
std::cout << ch << cl << ' ';
}
else
{
ch=c;
cout<<hex;
cout<<(int)ch<<' ';
}
}
void main()
{
char str[] = "I love 中国";

for( size_t i=0; i <strlen(str); ++i )
char2Hex( str[i] );
cout << endl;
}

K行天下 2008-09-10
  • 打赏
  • 举报
回复
第一个强制将a用int类型解释
cout < < boolalpha < < ( (int)a == (int&)a ) < < endl; // 输出什么?
输出false, 1.0转化为整数是一个很大的数,你可以参考IEEE浮点数表示法
cout < < boolalpha < < ( (int)b == (int&)b ) < < endl; // 输出什么?
输出true,浮点数和整数0的表示相同

第二个要使用unsigned char,因为中文ascii码大于127
jia_xiaoxin 2008-09-10
  • 打赏
  • 举报
回复
因为ASCII编码中除了字母和数字外,还有其他字符,而汉字的编码不是ASCII码,所以这样计算的结果可能就出现特殊字符,例如%,&等等。
wangdeqie 2008-09-10
  • 打赏
  • 举报
回复
楼主自己可以运行下啊,
wangdeqie 2008-09-10
  • 打赏
  • 举报
回复
老贴了。。。。。
jia_xiaoxin 2008-09-10
  • 打赏
  • 举报
回复
(int&)a是求a的地址

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧