程序员面试宝典 第5章:程序设计基本概念

    再过两个多月就要面临找工作的压力了,再这个暑假,好好地给自己充下电,让自己能轻松面对校园招聘。不多说了,直接记录下自己所学的知识点吧。

    5.1 赋值语句

    int i=i;这语句是合法的,变量一声明就可见的,而且是一个未定义的值;

    x=x&(x-1);这语句用于判断x中“1”的个数

    5.2 i++

    a<=1&&!x++;这句等效于(a<=1)&&(!x);x++;

    int arr[]={6,7,8,9,10};

    int *ptr=arr;

    *(ptr++)+=123;

    printf("%d,%d",*ptr,*(++ptr));

    (1)*(ptr++)+=123; ptr++先引用值,后ptr++,因此结果为arr的第一个元素6+123=129,ptr这时指向第二个元素.

    (2)先是*(++ptr),现在ptr指向8,然后*ptr也是8,输出8,8(函数printf从左往右读取,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所有从右边开始处理)

    5.4类型转换

#include <iostream>  
#include <string>  
#include <cstdlib>  
using namespace std;  
int main()  

{
    float a = 1.0f;

    cout<<(int)a<<endl;
    cout<<&a<<endl;//取变量a的地址
    cout<<(int&)a<<endl;//将该地址开始的sizeof(int)个字节当成整型数据输出。浮点数在内存中的存储格式有关,float 1.0在内存中存储为 符号位0,阶(8位)01111111,尾数(23位)000 0000000000 0000000000。于是将其看做int型数值的话00111111100000000000000000000000(2)=1065353216(10)。
    cout<<boolalpha<<((int)a == (int&)a)<<endl;  
    float b=0.0f;
    cout<<(int)b<<endl;
    cout<<&b<<endl;
    cout<<(int&)b<<endl; //0的整数形式和浮点形式其内存数据是一样的
    cout<<boolalpha<<((int)b == (int&)b)<<endl;
} 
   char* b = (char*)&a;//a可以认为是个指向 unsigned int类型数据的指针对吧,(char *)&a则把&a强制转换成 char *类型的指针,并且这个时候发生了截断!截断后,指针b只指向oxf7这个数据("小端存储",低地址单元存放低位数据),由于指针b是 char *型的,属于有符号数,所以有符号数0xf7在printf()的作用下输出fffffff7。
   5.6 a、b交换
   int max = ((a+b)+abs(a-b))/2;//求出a、b中较大值
   c=unsigned(a-b)>>(sizeof(int)*8-1);//通过移31位来判断首位,从而判断a、b的大小
   a=a^b;b=a^b;a=a^b;//不用担心超界,来进行交换
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值