Home » 未分类 » Linux C 学习笔记 五

Linux C 学习笔记 五

位操作符:针对二进制的操作

~:按位取反

<< : 左移 乘法,乘以2N次方,高位的非符号位舍弃

>> : 右移 除法,除以2N次方,高位的非符号位补零,低位舍弃

& | ^ :异或

 

 

++ —在运算中的组合

printf()语句中, printf在确定哥哥变量的结果时,顺序为从后往前

printf(“%d%d%d”,a,b,c); c–> b–>a

 

 

x++ ———–> 取值后加

x– ———–>取值后减

++x ———–>最后确定,不能确定最后是什么最后

–x ———–>最后确定,不能确定最后是什么最后

 

贪心算法

编译器在出现二异性时,编译器会选择尽可能多的结合运算符

 

#include<stdio.h>

int main(void)

{

int x=7;

printf(“x++:%d,x++:%d,x++:%d\n”,x++,x++,x++);

 

x=7;

printf(“++x:%d,++x:%d,++x:%d\n”,++x,++x,++x);

 

x=7;

printf(“x++:%d,++x:%d,x++:%d\n”,x++,++x,x++);

 

x=1;

printf(“%d,%d,%d,%d,%d,%d\n”,++x,x++,++x,x++,x++,++x);

//7,2,3,7,6,7

 

x=1;

printf(“%d,%d,%d,%d,%d,%d\n”,++x,x++,–x,x–,x++,++x);

//x 1 x 3 2 x

//3 1 3 3 2 3

 

x=1;

int y=(++x)+(x++); //2+2

printf(“(++x)+(x++):%d\n”,y);

 

 

int a=1;

int b1=a+a; //2

// int b2=a++a; //error

int b3=a+++a; // (a++) +a = 3

// int b4=a+++++a; // ((a++)++) +a= error ++ 操作带回写

// 表达式的值不能进行++ (a+b)++ error

a=1;

int b5=a+++a+++a+++a; //(a++)+(a++)+(a++)+a

printf(“b3:%d\n”,b3);

printf(“b5:%d\n”,b5);

 

return 0;

}

 

 

问号表达式

int res = a>b?a:b

当问号表达式确定整个表达式的值时,另外一边的运算不被执行。

 

逗号表达式

表达式整体的值为最后一个表达式的值。

 

隐式类型转换

注意无符号和有符号间的转换。

当一个int *float —>float

signed * unsigned —> unsigned

 

空格在C 语言中的意义

int a;

int *p=&a;

int b=100/*p; //此处代码通不过,因为 /**/为注释 改为:b=100/ *p 加一个空格即可

 

 

数组》 聚合数据类型

数组是一组有相同数据类型的数据的集合

格式:存储类型 数据类型 数组名[常量表达式]

数组长度是编译器决定的。数组放在stack

数组在stack是连续存放的,并且是字对齐,不存在奇数

数组越界访问属于非法操作,会引发段错误或其他异常,编译器不会检查数组越界错误,需要由程序员自行检查数组越界错误。

数组名的含义:

左值:整个数组,不要将数组名作为左值来操作,除非用于初始化。

右值:地一个元素存放的地址

sizeof(左值) 默认为左值

int *p=array;

sizeof(p) —> 4 32位平台,所有指针大小为4

This entry was posted in 未分类. Bookmark the permalink.