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;
再来说说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
好啦,这部分程序设计的基本概念先告一段落~