程序员面试宝典 第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   
#include   
#include   
using namespace std;  
int main()  

{
    float a = 1.0f;

    cout<<(int)a<
    cout<<&a<
    cout<<(int&)a<浮点数在内存中的存储格式有关,float 1.0在内存中存储为 符号位0,阶(8位)01111111,尾数(23位)000 0000000000 0000000000。于是将其看做int型数值的话00111111100000000000000000000000(2)=1065353216(10)。
    cout<int)a == (int&)a)<  
    float b=0.0f;
    cout<<(int)b<
    cout<<&b<
    cout<<(int&)b<
    cout<int)b == (int&)b)<
} 
   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;//不用担心超界,来进行交换

你可能感兴趣的:(C/C++,算法)