A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 普通蜗牛 中级黑马   /  2015-8-2 17:15  /  506 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


#ifndef _726____________h
#define _726____________h
#endif

//********************************************************************
********************************************
运算符:用来连接操作数,组成有意义的式子

分类:算数运算符 关系运算符 逻辑运算符  位运算符

//********************************************************************
****************************************************************
位运算符 :用于整数的二进制为之间的运算

        &  |   ^   ~
//********************************************************************
********************************************************************

& 按位与:如果两个位进行&操作 同1结果则为1 ,有0结果就为0
  // 9&8
//        00000000000000000000000000001001
//    &   00000000000000000000000000001000
//    -----------------------------------------
//        00000000000000000000000000001000       即是10进制的8
//********************************************************************
********************************************************************

| 按位或:如果两个位进行|操作,有1则结果为1,同0结果就为0

//       00000000000000000000000000001001
//      &00000000000000000000000000001000
//------------------------------------------
//       00000000000000000000000000001001         9

//********************************************************************
********************************************************************
~  按位取反:1变0 ,0变1
//~9;
//00000000000000000000000000001001
//~
//-----------------------------------
//11111111111111111111111111110110   补

补码-->原   :符号位不变,取反+1

//10000000000000000000000000001001   反

//10000000000000000000000000001010   原 -10

//********************************************************************
********************************************************************
^  按位异或:相同为0,不同为1

9^8
//        00000000000000000000000000001001
//^       00000000000000000000000000001000
//------------------------------------------
//        00000000000000000000000000000001

//********************************************************************
********************************************************************
>> 右移位
//8>>2  == 2

一个数右移n位,值等于 原值 除以 2^n,结果是整数部分

右移位,移出去的部分要舍弃
高位要补符号位
000000000000000000000000000010
|

右移位,不会改变一个数的正负性

//********************************************************************
********************************************************************
<< 左移位

左侧、高位移动出去的位就丢了
低位开始补0

//8<<2   == 32
记忆的技巧:向左移动n位,相当于原数*2^n

00000000000000000000000000100000
|

致命问题
-1073741823
11000000000000000000000000000001;
|
00000000000000000000000000000100;

注意:左移可能会改变一个数的正负性

//*************************************************************
***************************************************************
左移位右移位总结
/*       00001000
   >>  00000010
      <<   00100000
*/
//实用技能:
//1)获取一个数的最低位  让这个数和1进行按位&操作
//...... 00000110
//...... 00000001

//*************************************************************
***************************************************************
数组指针预习

-------------------------->>>>>>>>>>>>>------------------------
数组指针:

指向数组元素的指针

数组指针的作用:

使用数组指针间接访问数组的元素

数组指针的定义:

int *p;

数组指针的初始化:

int a[4]={1,2,3,4};

int *p = a;  //数组指针,定义了一个指针变量p赋值数组的首地址(第一个元素的地址),p指向数组的第一个元素

int *p = &a[0]; //等价上面一句话

数组指针如何访问数组的元素:

1)p+1   表示指向数组的下一个元素
2)p-1   指向数组的上一个元素

-------------------------->>>>>>>>>>>>>------------------------
代码验证如下

int a[4]={8,5,1,24};
int *p=a;
printf("a+1=%p\n",a+1);//a+1=0x7fff5fbff814
printf("&a[1]=%p\n",&a[1]);//&a[1]=0x7fff5fbff814
printf("p+1=%p\n",p+1);//p+1=0x7fff5fbff814
printf("*p+1=%d\n",*p+1);//*p+1=9 是*p所指向的对象的值再加1
printf("*(p+1)=%d\n",*(p+1));//*(p+1)=5
printf("*p=%d\n",*p);//*p=8
printf("*p++=%d\n",*p++);//是位置自增  指向下一个位置  *p++=8
//但当下取出的值还是*p所指向的内容
printf("*p++=%d\n",*p++);//*p++=5
printf("*p++=%d\n",*p++);//*p++=1
printf("*p++=%d\n",*p++);//*p++=24

printf("*(a+1)=%d\n",*(a+1));//*(a+1)=5
printf("*a=%d\n",*a);   //*a=8

-------------------------->>>>>>>>>>>>>------------------------
预习数组指针后的总结


对于一个一维数组来说

int a[5];

1)获取 a[i]的地址有几种方法?

(1)&a[i]

(2)a+i

(3) int *p = a;
p+i

2) 获取 a[i]的值有几种方法?

(1)a[i]

(2)*(a+i)

(3) int *p = a;
*(p+i)

(4)*(&a[i])

-------------------------->>>>>>>>>>>>>------------------------


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马