C语言:操作符详解(1)

1.算数操作符:

“+” “-” “*” “/” “%”

注意点:

%号 只能用于整数

2.除数不能为0

/号,如果两数都是整数,结果为整数;如果有一个数为小数,结果为小数。

整型提升:凡是针对char,short型的数学运算,此时都会隐式转换为 int 型

(因为CPU运算一般以整型为基本单位)

算数转换:

long double

double 8个

float 4个

unsigned long int

long int 4个

long long 8个

unsigned int

int 4个

short 2个字节

如果某个操作数的类型在上面这个列表中排名较低,那么首先要转换为另外一个操作数的类型后执行运算。

警告: 但是算术转换要合理,要不然会有一些潜在的问题。

2.移位操作符

“<<” 左移操作符 左移相当于乘以2

">>"右移操作符 右移相当于除以2

左移操作符:左边抛弃,右边补0

右移操作符:1. 逻辑移位 :左边用0填充,右边丢弃

算术移位 :左边用原该值的符号位填充,右边丢弃。

符号位就是最高位,代表这个十进制数的正负:

最高位如果是0,就是正数,

最高位如果是1,就是负数,

对于移位运算符,不要移动负数位,这个标准是未定义的
例如:int num=10;
num>>-1;

3.位操作符(都是二进制位来说,双目操作符)

& 按位与 两个操作数都为1,结果才是1

| 按位或 两个操作数都为0,结果才是0

^ 按位异或 两个操作数相同,结果是0,两个操作数不相同,结果是1

~ 按位取反 按位取相反数 0变成1,1变成0

4.赋值操作符(双目操作符)

复制操作符最常见的就是“=”,赋值操作符可以连续使用,连续赋值

复合赋值操作符:

+= *= /= %= >>= <<= &= |= ^=

5.单目操作符

! 逻辑反操作

负值

正值

& 取地址

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

(如果要计算数组的长度,则数组在哪里定义,在哪里计算)

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

“–” 前置、后置–

“++” 前置、后置++

间接访问操作符(解引用操作符)

(类型) 强制类型转换

注意:* 间接访问操作,这个会在指针里面广泛用到。

++i,–i 先运算,再使用

i++,i-- 先使用,再运算

6.关系操作符

=

<

<=

!= 用于测试“不相等”

== 用于测试“相等”

7.逻辑操作符

&& 逻辑与 两个条件同时满足

|| 逻辑或 两个条件至少满足一个

特别:

短路性:&&左侧表达式为假时,右侧表达式不会进行求值

||左侧表达式为真时, 右侧表达式不会进行求值

8.条件操作符(C语言中唯一 一个三目运算符)

exp1 ? exp2 : exp3

exp1 为真 结果为exp2 为假 结果为exp2

9.逗号表达式

exp1, exp2, exp3, …expN

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

练习:

    int a=-16;
    int b=a>>1;//右移操作符,移动的是二进制位
    //存储到内存的是补码
    //右移操作符:
    //1、算术右移:右边丢弃,左边补原符号位(通常一般都是该种右移)
    //2、逻辑右移:右边丢弃,左边补0
    printf("%d\n",b);
    int c=5;
    int d=c<<1;
    printf("%d\n",d);
    //左移操作符:左边丢弃,右边补0
&--按位与,两个都是1才为1,只要有一个是0则为0
    int e=3;
    int f=5;
    int g=e&f;
    printf("%d\n",g);

 |--按位或,两个都是0才为0,只要有一个是1则为1
    int h=3;
    int i=5;
    int j=h|i;
    printf("%d\n",j);

 ^--按位异或,相同为0,相异为1
    int k=3;
    int l=5;
    int m=k^l;
    printf("%d\n",m);
    //C语言中没有同或符号,但是只要取异或的非即可,例如: m=!(k^l)
    int n=10;
    char o='r';
    char*p=&c;
    int arr[10]={0};
    printf("%d\n",sizeof n);//4 此处可省略n的括号
    printf("%d\n",sizeof(int));//4 类型不能省略括号
    printf("%d\n",sizeof(o));//1 字符类型为1
    printf("%d\n",sizeof(char));//1
    printf("%d\n",sizeof(p));//8或者4 指针大小看是64位还是32位
    printf("%d\n",sizeof (char*));//8 指针的类型
    printf("%d\n",sizeof(arr));//40
    printf("%d\n",sizeof(int [10]));//40 数组去掉名字,等号前面的就是数组的类型
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tyro达令

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值