小李子成熟了

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

分类:

  • 算术操作符
  • 移位操作符
  • 位操作符
  • 赋值操作符
  • 单目操作符
  • 关系操作符
  • 逻辑操作符
  • 条件操作符
  • 逗号表达式
  • 其他操作符(下标引用、函数调用和结构成员)

一、算数操作符

1、算术操作符包括:+  、— 、 *  、/ 、%

2、加、减、乘操作符和平常数学中的运算法则相同。

3、除法操作符左右两边操作数为整型,则执行整数除法,只要有一个操作数为浮点型,则执行浮点型除法。

4、取余操作符左右两边操作数必须为整数。

二、移位操作符

1、移位操作符包括:<<  左移操作符,>> 右移操作符 

2、左移操作符移位规则:左边抛弃,右边补0

//正数:原码=反码=补码 
   //负数:反码=原码除符号位取反  补码:反码+1 
   int num = 10;    //00000000 00000000 00000000 00001010
       num << 2;    //00000000 00000000 00000000 00101000
   int num = -10;   //11111111 11111111 11111111 11110110
       num << 2;    //11111111 11111111 11111111 11011000//正数:原码=反码=补码 
   //负数:反码=原码除符号位取反  补码:反码+1 
   int num = 10;    //00000000 00000000 00000000 00001010
       num << 2;    //00000000 00000000 00000000 00101000
   int num = -10;   //11111111 11111111 11111111 11110110
       num << 2;    //11111111 11111111 11111111 11011000

 

3、右移操作符移位规则:

    逻辑移位:右边抛弃,左边用0填充

    算数移位:右边抛弃,左边用原数字的符号位填充

int num = -1;   //11111111 11111111 11111111 11111111
       num >> 1;              
      //算数移位: //11111111 11111111 11111111 11111111
      //逻辑移位: //01111111 11111111 11111111 11111111
   int num = 2;    //00000000 00000000 00000000 00000010
       num >> 1;              
      //算数移位: //00000000 00000000 00000000 00000001
      //逻辑移位: //00000000 00000000 00000000 00000001

注意:移位操作符移动的是二进制位,不能移动负数位。

三、位操作符

1、位操作符包括:&按位与  、|按位或  、^按位异或

2、两个数字相同异或等于0,0和任何数字异或得该数字

3、给定一组数字,除一特殊数字外,其他都成对出现,找出该数字:异或所有数字 

//不创建临时变量,实现两数字交换
   int a = 10;
   int b = 20;
   a = a^b;
   b = a^b;
   a = a^b;
   printf("a = %d\tb = %d\n",a,b);
//求一整数在内存中的二进制中1的个数
   int num = -1int i = 0;
   int count = 0;
   while(num))
   {
       count++; 
       num=num&(num-1)
   } 
   printf("二进制中1的个数:%d",count);

四、赋值操作符

1、普通赋值操作符:=

2、复合赋值符:+= 、-= 、*= 、/= 、%= 、>>=  、<<= 、&=  、|= 、^=

 int a = 10;
   int x = 20;
   int b = a+x;
       x += 2;
       a *=2;

五、单目操作符

 

 

1、单目操作符包括:

!逻辑反   //一般用于表示真假

- 负值

+ 正值

& 取地址

sizeof 操作数的类型长度(以字节为单位)

~ 对一个数的二进制按位取反

-- 前置、后置--

++ 前置、后置++

* 间接访问操作符

(类型) 强制类型转换

2、sizeof()为操作符,不为sizeof()函数,()中可以为类型,也可为变量,为变量时()可以去掉,()中为数组名计算的是数组字节数

3、数组名arr取的是数组首元素的地址,&arr取的是整个数组的地址  //int (*p3)[10]=&arr;  p3是一个数组指针

4、关于数组名的扩充:

  • 数组名可以表示整个数组  : (1)、sizeof(数组名)(2)、&数组名
  • 数组名可以表示首元素地址  : 除以上两种情况外,数组名都表示首元素地址
void test1(int arr[])
{
    //计算传来首元素指针大小 
    printf("%d\n",sizeof(arr));//4
}
void test2(char ch[])
{
    //计算传来首元素指针大小 
    printf("%d\n",sizeof(ch));//4
}
int main()
{
    int arr[10] = {0};
    char ch[10] = {0};
    //计算数组的字节大小 
    printf("%d\n",sizeof(arr));//40
    printf("%d\n",sizeof(ch));//10
    test1();
    test2();
}
   

 

六、关系操作符

1、关系操作符包括:> 、>= 、< 、<= 、!= 、==

2、注意等于时用==,=为赋值操作符

 

七、逻辑操作符

1、逻辑操作符包括:&&逻辑与 、||逻辑或

2、对于逻辑与,左边为假,后边都不运算

3、对于逻辑或,左边为真,后边都不运算

int i = 0,a = 0,b = 2,c = 3,d = 4;
    i = a++ && ++b && d++; 
    printf("%d %b %b %b",a,b,c,d);//1 2 3 4
    i = a++ || ++b || d++; 
    printf("%d %b %b %b",a,b,c,d);//2 2 3 4

八、条件操作符

exp1 ? exp2  :exp3

九、逗号表达式

exp1 ,exp2  , exp3,……expN

逗号表达式,就是用逗号隔开的多个表达式。逗号表达式,从左到右执行,整个表达式的结果是最后一个表达式的结果

十、其他表达式(下标引用、函数调用和结构成员)

1、[ ]下标引用操作符

操作数:一个数组名+一个索引值

2、()函数调用操作符

接受一个至多个操作数,第一个为函数名,其他给函数传递实参

3、访问一个结构成员

  • 结构体.成员名

      ->结构体指针->成员名

 

posted on 2019-04-07 22:36  小李子成熟了  阅读(312)  评论(0编辑  收藏  举报