写点什么

操作符这块,你可得把握住

作者:芒果酱
  • 2022 年 7 月 11 日
  • 本文字数:1833 字

    阅读完需:约 6 分钟

1.操作符分类

算术操作符: + - * / %
复制代码


移位操作符: << >>
复制代码


位操作符: & | ^
复制代码


赋值操作符: =  +=  -=  *=  /=  %=  &=  ^=  & *
复制代码


单目操作符: sizeof ! ++ -- 
复制代码


关系操作符: > >= <= < != ==
复制代码


逻辑操作符: && ||
复制代码


条件操作符:  ?:    唯一的一个三木操作符
复制代码


逗号表达式: .
复制代码


下标引用,函数调用和结构成员: []  ()  .  ->
复制代码



/ -除号操作符

对于除号操作符:


1.两边都是整数:执行整数除法,与保存的类型无关


int main(){  int a = 0;  int b = 0;  int c = 0;  printf("输入两个操作数:->\n");  // 5 2  scanf("%d %d", &a, &b);  c = a / b;  printf("结果为: %d\n", c);  // 2  return 0;}
复制代码


//若接收类型为double类型  int main(){  int a = 0;  int b = 0;  double c = 0;  printf("输入两个操作数:->\n");  // 5 2  scanf("%d %d", &a, &b);  c = a / b;  printf("结果为: %lf\n", c);  // 2.000000  并不是2.500000  return 0;}
复制代码



% - 取模操作符

对于取模操作符:%操作符两边元素只能为整形


int a = 10;int b = 3;int c = a % b;
复制代码




int a = 10;double b = 3;  int c = a % b;//err
复制代码




int a = 10;int b = 3;double c = a % b;   //接收类型可以为其他类型
复制代码




A % B : 最终得到的值小于 B


所以:


rand():产生随机数的函数-通常配套 srand()函数:随机数生成器使用


(具体内容看分支与循环猜数字游戏)


​ -->srand(unsigned int)time(NULL) //拿时间戳作为参数


生成的随机数范围:0-32767


所以若要得到 0-99 的数:rand() %100


若要得到 1-100 的数:rand()%100 +1



<< >> 左移右移操作符

<< 左移操作符


>> 右移操作符


移动的是二进制位(补码) --只针对整形



左移操作符 <<

左边丢弃,右边补 0


左移相当于数值乘 2


int c = 4;c << 1;printf("%d\n",c);  //4还是8?//4  原因:并没有接收c << 1的值
//若想结果位8 c = c<< 1;printf("%d\n",c); //8
复制代码



右移操作符 >>

情形1:逻辑右移:左边用0填充,右边丢弃情形2:算术右移:左边补符号位,右边丢弃
复制代码




当前 VS2019 采用的是算术右移


int a = 1;// 00000000 00000000 00000000 00000001  --原码//正数:原反补相同
//若采取的是逻辑右移// 00000000 00000000 00000000 00000000 -补码//最高位为符号位:0,正数 原反补相同//对应原码为:00000000 00000000 00000000 00000000 -打印结果为0a = a >> 1;printf("%d\n",a); //0
复制代码




//err写法int a = 15;int b = a >> -1;    //C语言标准未被定义的写法
复制代码




注意:左移/右移操作数只能为整形,不能为浮点数


float c = 4,5f;c >> 1;  //err
复制代码




补码为全 1 -> %d 打印 表示-1


补码求补码 ->原码



关于 & | ^

只能用在整形数据(正数,负数都可以)!


& 按位与


 1001&1111----- 1001   //对应比特位进行按位与运算  有0则为0 两个比特位都为1,结果才为1
复制代码




| 按位或


 1001|1111----- 1111  //对应比特位进行按位与运算  有1则为1 两个比特位都为0,结果才为0
复制代码




^ 按位异或


 1001^1111----- 0110//对应比特位进行按位异或运算  对应比特位相同为0 不同为1
复制代码




使特定位翻转,即异或上该特定位为 1,其它位为 0 的二进制序列




如: X: 1100 0011 使倒数第三个二进制位翻转   使1100 0011异或上0000 0100 ==> 1100 0011    ^0000 0100    ----------     1100 0111  ==>这样的话就使X的倒数第三位翻转了
复制代码


使特定位翻转:   对应X要翻转的比特位,该数的对应位为1,其他位为0,次数与X对应位异或即可   如:X = 10101110  使X的低4字节位翻转,    X ^ 0000 1111即可  ==>1010 1110     ^0000 1111  ==>1010 0001  ->x的低4位翻转了
复制代码



2.如何得到二进制序列最后一位比特位是 1 还是 0

首先,整形在内存中以补码形式存储


方法:只需要让该位按位与上 1,即可得知最后一位比特位是 0 还是 1




若最后一位比特位为 1:结果为 1 否则为 0


1 的二进制序列: 00000000 00000000 00000000 00000001


符号位为 0,正数:原反补相同


其他位比特为 0,所以和比特位相于的结果为 0


int a  =15;// 00000000 00000000 00000000 00001111   ->a的补码//&00000000 00000000 00000000 00000001   ->1的补码--------------------------------------// 00000000 00000000 00000000 00000001  ->结果为1      //即a的最后一位比特位为1
复制代码


int main(){    int a = 0;    int b = 0;    scanf("%d",&b);    a = b &1;    printf("%d补码的最后一位比特位是%d",b,a);}
复制代码


今天就先到这吧~感谢你能看到这里!希望对你有所帮助!欢迎老铁们点个关注订阅这个专题! 同时欢迎大佬们批评指正




发布于: 2022 年 07 月 11 日阅读数: 8
用户头像

芒果酱

关注

我们都在努力奔跑,我们都是追梦人! 2022.02.14 加入

个人宣言:功崇惟志,业广惟勤 个人简介: 0.在校大学生 1.CSDN:C/C++领域新星创作者 2.掘金LV3创作者 3.华为云开发者社区云享专家 4.阿里云开发者社区专家博主 5.InfoQ创作者

评论

发布
暂无评论
操作符这块,你可得把握住_7月月更_芒果酱_InfoQ写作社区