关于面试宝典中的各个问题(一)

1、关于浮点数1.0f在内存中的表示:是3f800000.

各个类型所占的字节数(byte),1byte=8bit

char  1

short 2

bool 1

int 4

long 4

float 4

double 8

long double 8

char * 4

int * 4

float * 4

以上是对于我的电脑,在典型的32位机上面的用VS2008的情况,64位机上会有不同。具体情况会因为电脑和编译器的原因而不同。参考资料《深入理解计算机系统》P28.

2、整数提升 --来自《面试宝典》P37

int _tmain(int argc, _TCHAR* argv[])
{
	unsigned char a=0xA5;
	unsigned char b=~a>>5;
	printf("b=%d",b);
	getchar();
	return 0;
}

结果是b=250,原因是整数提升,a取反后不是8Bit是16Bit,前面的0也变成了1.

3、a,b交换问题

先发一段求a,b中较大的一个的程序:

	int a=5;
	int b=3;
	int c=a-b;
	char *strs[2]={"a large","b large"};
	c=unsigned(c)>>(sizeof(int)*8-1);

	printf("%s",strs[c]);
	getchar();
	return 0;
这个程序我觉得还比较有意思,另一种较简单的做法就是int max=((a+b)+abs(a-b))/2;

再来说说ab交换的问题:

用异或^比较好,因为不容易出现越界的问题,

a=a^b;

b=a^b;

a=a^b;

就可以了。

4、这个问题是在处女面的时候被问到的问题:

C和C++

C++中调用被C编译器编译后的函数为什么要加extern "C"

C++语言支持函数重载,而C不支持,所以extern c这个链接交换指定符号解决名字匹配问题。

最后关于extern "C"等等,推荐一个网页

http://www.cnblogs.com/skynet/archive/2010/07/10/1774964.html

好啦,这部分程序设计的基本概念先告一段落~

原文地址:https://www.cnblogs.com/liuliunumberone/p/2074528.html