首页 > 其他分享 >操作符详解

操作符详解

时间:2023-04-20 15:07:55浏览次数:27  
标签:右移 int s1 详解 按位 操作符 表达式

算术操作符

移位操作符

位操作符

赋值操作符

单目操作符

关系操作符

逻辑操作符

条件操作符

逗号表达式

下标引用,函数调用和结构成员

1.算数操作符

 +   -   *   /     %

2.移位操作符

 >>右移      <<左移


右移操作符,移动的是二进制位

右移操作符:1.算术右移 2.逻辑右移

算术右移:右边丢弃,左边补原符号位

逻辑右移:右边丢弃,左边补0

右移一位有除二的效果

左移操作符  

左边丢弃,右边补0

左移有乘2的效果

对于移位操作符,不要移动负数位,这个是标准未定义的

例如int num = 10

num>>1;//不能这样移动负数位

3.位操作符

&//按位与

| //按位或

^ //按位异或

他们的操作必须是整数

& 按位与-按二进制位与

对应的二进制位有一个为0则为0,两个为1才为1

|  按位或-按二进制位或

对应的二进制位有一个1则为1,两个同时为0才为0

^ 按位异或-按二进制异或

对应的二进制位相同为0,相异为1

5.赋值操作符

=(变量在创建的时候有了的值叫做初始化,如果再给他一个 值就叫做赋值)

==(判断相不相等)

6.复合赋值符

+=      -=    *=      /=     等等

int main()
{
  //1
       int a = 10;//
       a = a+2;
  //2
       a += 2;//复合赋值符,他与第一种方法等价
       a = a>>1;//
       a >>= 1;//也是等价的
      return 0;
}

7.单目操作符

只有一个操作数

!      逻辑反操作(真变假假变真)

 -              负值

 +             正值

&             取地址

 *                解引用操作符

sizeof          求 ......大小(计算变量所占内存的大小,单位是字节)

#define _

#include<stdio.h>
int main()
{
              int a = 10;
              short s = 0;//短整型,它只能存储两个字节的大小
              printf("%d\n", sizeof(s = a + 5));//所以不管怎么样,打印的最大值是二,这里面的a+5是不会参与运算的,所以s的值也不会发生变化
              printf("%d\n",s);//没有发生变化,sizeof内部的表达式不参与运算
              return 0;
}

~                          对一个二进制数的按位取反(二进制的所有位真变假假变真)

源码符号位不变其他符号位按位取反得到反码,其他符号为不变反码加1得到补码

--           前置,后置--

++             前置,后置++

(类型)        强制类型转换

8.关系操作符

 >

>=

<

<=

!=         不相等

==          相等,判断

9.逻辑操作符

&&         逻辑与 ,或者(两个变量都为真则为真,有一个为假,则为假)

||             逻辑或,并且(有一个为真则为真,两个同时为假才为假)

逻辑与的特点,左边如果算出的结果是假,则右边的就不会再计算了,不管右边是真还是假

逻辑或的特点,左边如果算的结果是真,则右边的就不会在计算了,不管右边是真还是假

10.条件操作符(三目操作符)

exp1 ? exp2 : exp3

表达式1执行的结果为真,执行表达式2(表达式2的结果为整个表达式的结果),否则,执行表达式3(表达式3是整个表达式的结果)

例如,我们要实现一个这样的程序,如何用条件操作符来实现??

#define _

#include<stdio.h>

int main()
{
  int a = 0
    int b = 0
    if(a>5)
      b = 3;
      else
        b = -3;
         return 0;
}

如何用条件操作符来实现呢?

#define _

#include<stdio.h>
int main()
{
    b = (a>5 ? 3 : -3);//如果a>5为真,则会执行表达式二,也就是3,如果为假,执行表达式3,也就是-3
}

11.逗号表达式

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

12.下标引用。函数调用和结构成员

1.下标引用操作符[]

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

2.函数调用操作符()

接受一个或者多个操作数,第一个操作数是函数名,剩余的操作数就是传递给函数的参数

调用函数的时候的()就是函数调用操作符

3.结构体成员

#define _
#include<stdio.h>
struct stu//创建一个结构体类型strust stu
{//描述结构体成员需要的成员变量
  char name[20];
  int age;
  char id[20];
};
int main()
{
  int a = 10;
  struct stu* ps = &s1;
  printf("%s\n", (*ps).name);//ps里面存着s1的地址,通过对ps的解引用操作符找到s1地址里面存放的常量,然后加以.name就能找到他的成员
  printf("%s\n", ps->name);//ps所指向的对象的成员name,也可以这样来打印,会比较快
  struct stu s1 = {"张三", 20, "123456789"};//创建了一个学生对象s1,并初始化
  printf("%d\n", s1.name);//将s1打印,点操作符用来访问结构体成员,点是作用于左边是一个结构体变量,右边是结构体成员名
  printf("%d\n", s1.age);
  printf("%d\n", s1.id);
  return 0;
} //结构体变量.成员名







标签:右移,int,s1,详解,按位,操作符,表达式
From: https://blog.51cto.com/u_16031366/6209568

相关文章

  • docker安装及优化详解
      一、docker安装步骤详解docker初期版本是1.13(同一版本,开源)——》分类型1.15-1.17过程中分成两种。①开源社区docker-ce②企业版docker-ee目前Docker只能支持64位系统。​1.#关闭防火墙systemctlstopfirewalld.servicesetenforce0​2.#安装依赖包yum......
  • 11-CSS3属性详解(一)
    title:11-CSS3属性详解(一)publish:true前言我们在上一篇文章中学习了CSS3的选择器,本文来学一下CSS3的一些属性。本文主要内容:文本盒模型中的box-sizing属性处理兼容性问题:私有前缀边框背景属性渐变文本text-shadow:设置文本的阴影格式举例: text-s......
  • 12-CSS3属性详解:动画详解
    title:12-CSS3属性详解:动画详解publish:true前言本文主要内容:过渡:transition2D转换transform3D转换transform动画:animation过渡:transitiontransition的中文含义是过渡。过渡是CSS3中具有颠覆性的一个特征,可以实现元素不同状态间的平滑过渡(补间动画),经常......
  • 13-CSS3属性:Flex布局图文详解
    title:13-CSS3属性:Flex布局图文详解publish:true前言CSS3中的flex属性,在布局方面做了非常大的改进,使得我们对多个元素之间的布局排列变得十分灵活,适应性非常强。其强大的伸缩性和自适应性,在网页开中可以发挥极大的作用。flex初体验我们先来看看下面这个最简单的布局:......
  • 14-CSS3属性详解:Web字体
    title:14-CSS3属性详解:Web字体publish:true前言开发人员可以为自已的网页指定特殊的字体(将指定字体提前下载到站点中),无需考虑用户电脑上是否安装了此特殊字体。从此,把特殊字体处理成图片的方式便成为了过去。支持程度比较好,甚至IE低版本的浏览器也能支持。字体的常见格......
  • 07-html标签图文详解(二)
    title:07-HTML标签图文详解(二)本文主要内容列表标签:<ul>、<ol>、<dl>表格标签:<table>框架标签及内嵌框架<iframe>表单标签:<form>多媒体标签滚动字幕标签:<marquee>列表标签列表标签分为三种。1、无序列表<ul>,无序列表中的每一项是<li>英文单词解释如下:ul:unordered......
  • 08-HTML5详解
    title:08-HTML5详解publish:trueHTML5的介绍Web技术发展时间线1991HTML1994HTML21996CSS1+JavaScript1997HTML41998CSS22000XHTML1(严格的html)2002TablelessWebDesign(表格布局)2005AJAX2009HTML52014HTML5Finalized2002年......
  • 10-HTML5详解(二)
    title:10-HTML5详解(二)publish:true本文主要内容拖拽历史地理位置全屏拖拽如上图所示,我们可以拖拽博客园网站里的图片和超链接。在HTML5的规范中,我们可以通过为元素增加draggable="true"来设置此元素是否可以进行拖拽操作,其中图片、链接默认是开启拖拽的......
  • 11-HTML5详解(三)
    title:11-HTML5详解(三)publish:trueWeb存储随着互联网的快速发展,基于网页的应用越来越普遍,同时也变的越来越复杂,为了满足各种各样的需求,会经常性在本地存储大量的数据,传统方式我们以document.cookie来进行存储的,但是由于其存储大小只有4k左右,并且解析也相当的复杂,给开发带......
  • hdparm命令详解:-bash: hdparm: 未找到命令
    一、安装软件[root@localhost~]#yuminstallhdparm-y二、说明作用:Linuxhdparm命令用于显示与设定硬盘的参数。hdparm可检测,显示与设定IDE或SCSI硬盘的参数。语法:hdparm[-CfghiIqtTvyYZ][-a<快取分区>][-A<0或1>][-c<I/O模式>][-d<0或1>][-k<0或1>][-K<0或......