程序员面试宝典一

1、int i=i;   ?

     首先声明一个变量i,然后将变量i的值(未初始化)赋值给自己

2、下面代码的意义

void func(int x,int &count)
{
	while(x)
	{
		count++;
		x=x&(x-1);   //求将x转换为二进制后包含1的个数
	}
}

     求一个整数转换为二进制之后包含多少个1
3、printf在VC6.0下是自右向左运算的(好像跟编译器有关)

	int arr[]={6,7,8,9,10};
	int *ptr=arr;
	*(ptr++)+=123;                         //*ptr++123;  ptr++;
	printf("%d,%d\n",*ptr,*(++ptr));       //++ptr; *(ptr); *(ptr);

4、(int)a与(int&)a的区别

	float a=1.0f;
	cout<<(int)a<<endl;   //1
	cout<<(int&)a<<endl;  //很大的一个数
	cout<<boolalpha<<((int)a==(int&)a)<<endl;   //fasle

	float b=0.0f;
	cout<<(int)b<<endl;   //0
	cout<<(int&)b<<endl;  //0
	cout<<boolalpha<<((int)b==(int&)b)<<endl;   //true       

      (int)a 是取a的整数部分      

      (int&)a是取a在内存中存储的二进制格式,然后转换成int数值

5、如何快速取一个整数的7倍(利用位运算的高效)

      x << 3  - x 

6、判断一个数是不是2的n次幂

     ( ( x & (x-1) == 0 ) && x != 0 )

7、找错题

struct S 
{ 
    int i; 
    int * p; 
}; 

int main() 
{ 
    S s; 
    int * p = &s.i;   // &s.i的值实际就是 &s的值,p指向了结构体s的地址的起始位置
    p[0] = 4; 
    p[1] = 3;         // s.p指向0x00003
    s.p = p;          // s.p指向的是s的首地址,s.p[0]相当于s.i,s.p[1]相当于s.p
    s.p[1] = 1;       // s.p的值为1,也就是s.p指向内存的0x00001处,s.p[1]=*(s.p+1)=*(&s.i+1)=*(&s.p)=s.p=1
    s.p[0] = 2;       // s.p[0]=*(s.p+0)=*(1+0)=*1,s.p[0]=2的时候,访问地址为1的地方,而地址为1的内存不属于这个程序,出现访问非法内存的错误
    return 0; 
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值