C语言 操作符

算数操作符

在C语言中,%只能针对 整数 进行.
%不能对0求,如果编译器能够检查出/0了,那么就会编译期报错,如果检查不出来,就运行时报错.
如果除数时常量,能检查出来,除数是变量(int b = 0, 5 / b ),编译器无能为力.
计算除法基于CPU, CPU执行到当前这个除以0的指令的时候,就会产生一个中断,此时操作系统 就会检测到这个中断,就会给对应的进程发送一个信号,导致这个进程异常终止.

C中整数除以整数,结果还是整数.
直接把小数部分给舍弃了,没有四舍五入

如果两个不同的类型的变量进行算术运算,就会触发隐式类型转换, 内置的转换规则为 短的往长的转.

#include<stdio.h>

int main(){
   
    double a = 5.0;
    int b = 2;
    printf("%f",a / b);
    return 0;
}

强制类型转换(显示类型转换)

#include<stdio.h>

int main(){
   
    int a = 5;
    int b = 2;
    printf("%f",(double)a / (double)b);
    return 0;
}

移位操作符

(针对二进制)
1.左移运算 <<

10=>1010(二进制)
左移一位之前:
0000 0000 0000 0000 0000 0000 0000 1010
左移一位后:
0000 0000 0000 0000 0000 0000 0001 0100

1010 << 1 = 10100
10100 => 20

左移二位后: 101000 => 40

每次左移一位相当于 * 2

2.右移运算 >>
(1) 算术右移:最低位舍弃,整体往右挪一位,最高位补符号位.
(2)逻辑右移:最低位舍弃,整体往右挪一位,最高位补0. (C语言中不支持)

符号为正负号,
计算机表示一个负的整数:拿最高为作为符号位.
如果符号位为0,表示是整数.如果符号位为1,表示是负数.
-10 二进制表示:
1000 0000 0000 0000 0000 0000 0000 1010(大概就是这样)

10二进制右移一次:
0000 0000 0000 0000 0000 0000 0000 0101

101 => 5

针对算术右移操作,右移一位,相当于除以2

遇到考试/面试题时候如果在代码中,需要计算乘除2 ^ n,就可以等价转换成移位运算~
*4 就可以转换成<< 2.

实际开发角度就不需要转换,代码可读性优先.


位操作符

1.& 按位与
2.| 按位或
3.^ 按位异或
4.~ 按位取反

把两个操作数的对应的二进制位进行按位运算.

&,如果两个位都是1,结果为1,否则为0
|,如果两个位都是0,结果为0,否则为1
^,相同为0,相异为1.

~,针对一个操作数来进行计算的,针对每一位0 -> 1,1 -> 0

a = 1 0001
b = 2 0010
a & b 0000
a | b 1100
a ^ b 0011

#include<stdio.h>

int main(){
   
    int a = 1;
    int b = 2;
    printf("%d\n",a&b);
    printf("%d\n",a|b);
    printf("%d\n",a^b);
    printf("%x\n",~<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值