再过两个多月就要面临找工作的压力了,再这个暑假,好好地给自己充下电,让自己能轻松面对校园招聘。不多说了,直接记录下自己所学的知识点吧。
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()
{
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;
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。
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;//不用担心超界,来进行交换