当前位置: 首页 > 编程日记 > 正文

操作符和表达式

一.  操作符

1.      算术操作符

+  -  * /  %

除了%之外其余的几个操作符既可以用于计算整型也可以用于计算浮点型数据,%只能计算整型数据,得到的结果是余数

2.      移位操作符

<<    左移位操作符     >> 右移位操作符

<<左移时,值最左边的几位被丢弃,右边多出来的几个空位由0补齐。

>>右移时,从左边移入新位有两种方式。一种方案是逻辑移位,左边移入的数由0填齐;另一种是算术移位,左边移入的数由原先该值得符号位决定,符号位为1则移入的为均为1,符号位为0则移入的位为0。

警告:

标准说明无符号执行的所有的移位操作都是逻辑移位,但是对于有符号值,移位操作取决于自己的编译器。一个程序如果使用有符号是数的右移操作,那么它是不可移植的。

如果出现下面的移位操作:a<<-5

标准说明这类移位是未定义的,所以它由编译器来决定,这种结果是不可预测的,使用这样的程序也是不可移植的,我们应该避免这类的移位操作。

3.      位操作符

&    |      ^

&与操作符:当两个位进行与操作时,如果两个位都是1,结果为1,否则为0;

|或操作符:两个位中有至少有一个位为1,结果为1,否则为0;

^异或操作符:两个位不同时结果为1,如果两个位相同,结果为0.

上面的三个操作符要求两个数位整型。

 

下面介绍几种位的操纵:

(1)    将某一位置为1

value = value | (1<<number)

(2)    将某一位置为0

value = value &~ (1<<number)         ~是取反的意思

(3)    对某一位进行为1测试

value = value &(1<<number)

如果该位已经是1,则表达式的结果为非0值

4.      赋值

=

赋值操作符的结合性是从右到左,所以下面的这个语句a = x = y + 3;他的意思和下面的语句是等价的a = (x = y + 3);

复合赋值符

+=    -=     *= /=  %= 

<<=  >>=   &=  ^=  |=

5.      单目操作符

!  ++  - &  sizeof

~  --  + *  (类型)

!操作符,对它的操作数进行逻辑反操作,如果操作数为真,其结果为假,如果操作数为假,其结果为真。这个操作数的结果只有两个值,0或1。

~操作符,对整类型的操作数进行求补操作,操作数中原先所有为1的位置为0,为0的位置为1。

-产生的操作值为负值

&操作数产生它的操作数的地址

*操作符是间接访问操作符,它与指针一起使用,用于访问指针所指向的值。sizeof操作符判断它的操作数的类型长度,以字节为单位表示。

(类型)操作符是强制类型转换,它用于显式的将表达式的值转换为另外的类型。

++和—操作符,注意前置和后置就好,前置是先计算后使用,后置是先使用后计算

6.      关系操作符

>    >=   <    <=    !=   ==   

需要注意的是,这些操作符产生的结果不是布尔值,而是整型值,如果对返回1,如果不对返回的是0。这里我们在使用==操作符的时候,应该特别注意的是不要把==写成了=。

7.      逻辑操作符

&&    ||

&& 逻辑与   expressionl1  && expression2  两真才真,一假就假

一个有趣的点就是,&&的优先级比<,>等的优先级低,所以如果是下面的表达式, a>5 && a<10,则实际的求值顺序是下面这个样子的:(a>5)&& (a<10),但是有一点需要引起大家的注意,就是如果a>5这个表达式的结果为假,那么后面的a<10根本不进行判断,并且整个表达式的结果为假。

|| 逻辑或    expressionl1  ||  expression2  一真就真,两假才假

逻辑或操作符也有一个有趣的特点就是,如果第一个表达式的结果是真,那么第二个表达式也不进行求解,并且整个表达式的结果为真。

上面的这两种行为被称为“短路求值”

8.      条件操作符

expressionl1 ? expression2 : expression3    操作的过程是,首先判断expressionl1的值是不是真,如果为真则执行expression2,如果为假则执行expression3

9.      逗号操作符

expressionl1 , expression2 , …… , expression  操作的过程是从左到右依次对各个表达式进行求值,整个表达式的值就是最后一个表达式的值。

10.  下标引用、函数调用和结构成员

下标引用主要出现在数组中arry[下标]  和  *( arry + (下标) )

函数调用操作符 就是在一个函数中调用另一个函数

结构成员 是在结构体中使用 . 和 –> 用于访问结构体的一个成员,我们需要注意一点是,当我们访问结构体的一个成员的时候,我们已经知道这个结构体了,我们可以使用例如s.a,但是如果我们此时拥有的是指向该结构体的一个指针而不是这个结构体,那么我们应该使用的是 -> 。

二.  布尔值

C语言不具备显示的布尔值,但是可以用整数来代替,其规则是0是假,非0为真

三.  左值和右值

左值是放在赋值符左边的东西,右值就是放在赋值符号的右边的东西。

简单的理解一下就是左值就是这个变量本身,右值则是变量的内容,以后还会详细介绍关于左值和右值的理解

四.  表达式求值

1.      隐式类型转换

C语言一般为了获得一个精度,表达式中的字符型和短整型首先被转换成普通的整型,然后再进行计算,这种方式被称为整型提升。如下面的求值例子:

char a,b,c;

a = b + c;

b和c的值被提升为普通整型,然后进行加法运算,加法运算的结果将被截短,然后再存储在a中。

2.      算术转换

如果某个操作符的各个操作数的类型不一样,那么除非其中一个转换成另一个,否则无法计算,下面的层次被称为寻常算术转换。

  long double

  double

  float

  usinged long int

  long int

  usinged int

  int

如果某个操作数的类型在上面的列表排名较低,那么它首先将转换成比它排名高的,然后再进行计算。

3.      操作符的属性

复杂表达式的求值顺序是由3个因素决定的:操作符的优先级、操作符的结核性和操作符是否控制执行的顺序。

下表显示了各个操作符的优先级


4.      优先级和求值的顺序

两个相邻的操作符的执行顺序由它们的优先级决定,如果它们的优先级相同,它们的执行顺序由它们的结合性决定。除此之外,编译器可以自由的决定使用任何顺序对表达式进行求值,只要它不违背逗号、&&、||、和?:操作符所施加的操作。

看下面的语句:

a * b + c * d + e * f

这里并没有任何规则要求所有的乘法首先进行,也没有规定这几个乘法之间谁先执行。优先级在这里没有作用,优先级只对相邻的操作符的执行顺序起作用。

下面的这条语句是危险的:c + --c,因为在不同的编译器下面结果是不一样的,感兴趣的同学可以上网搜索或者自己测试分析一下。

 

 

相关文章:

kuayu react_react跨域解决方案

react跨域解决方案1.开发环境:reactaxioselement2.电脑系统:windows10专业版3.在使用react开发的过程中,我们总是会遇到跨域的问题,下面我来分享一下,在react中跨域处理方法!4.我使用的是axios向后台发送请求,安装axios:npm i axios --save5.安装代理中间件(http-proxy-middlew…

HDU 1429 胜利大逃亡(续) (BFS+位压缩)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3309 Accepted Submission(s): 1063 Problem DescriptionIgnatius再次…

Ext fucionchart插件

http://code.google.com/p/uxmedia/downloads/list转载于:https://www.cnblogs.com/jerome-rong/archive/2012/06/09/2543565.html

前端 ----jQuery的动画效果

03-jQuery动画效果 jQuery提供的一组网页中常见的动画效果&#xff0c;这些动画是标准的、有规律的效果&#xff1b;同时还提供给我们了自定义动画的功能。 显示动画 方式一&#xff1a; $("div").show(); 解释&#xff1a;无参数&#xff0c;表示让指定的元素直接显…

结构和联合--结构体内存和位段内存开辟规则

一. 结构的基本知识 聚合数据类型能够存储多个数据&#xff0c;C语言提供了两种类型的聚合数据类型&#xff0c;数组和结构。数组是相同的数据&#xff0c;结构是不同类型的数据聚合。结构也是一些值得集合&#xff0c;这些值成为它的成员&#xff0c;每个结构都有它的名字&a…

antd自定义分页器_自定义分页器

classPagination(object):def __init__(self, current_page, all_count, per_page_num10, pager_count11):"""封装分页相关数据:param current_page: 当前页:param all_count: 数据库中的数据总条数:param per_page_num: 每页显示的数据条数:param pager_count:…

.net实现跨页面传值

//一般用于向php&#xff0c;jsp等传值&#xff0c;因为跨语言session等不能共用&#xff0c;只有通过post提交 //下面演示的是服务器端控件提交 PostBackUrl"WebForm3.aspx"//这个页面只需要修改控件属性就能把值传给下一页面 protected void Page_Load(object send…

进程的同步、互斥以及PV原语

在处理进程间的同步与互斥问题时&#xff0c;我们离不开信号量和PV原语&#xff0c;使用这两个工具的目的在于打造一段不可分割不可中断的程序。应当注意的是&#xff0c;信号量和PV原语是解决进程间同步与互斥问题的一种机制&#xff0c;但并不是唯一的机制。 信号量&#xff…

ListT中,Remove和RemoveAt区别

Remove删除的是匹配的第一项。比如你的list里面有2个相同的项。那么就删除第一个。后面的不删除&#xff0c;找不到元素和删除失败都返回falseRemoveAt是删除索引下的项 转载于:https://www.cnblogs.com/mcyushao/p/9526208.html

vue 如何处理两个组件异步问题_Vue动态异步组件实现思路及其问题

前言&#xff1a;在vue官方资料中&#xff0c;我们可以可以很学会如何通过vue构建“动态组件”以及“异步组件”&#xff0c;然而&#xff0c;在官方资料中&#xff0c;并没有涉及到真正的“动态异步”组件&#xff0c;经过大量的时间研究和技术分析&#xff0c;我们给出目前比…

[转载] 七龙珠第一部——第004话 掳人的妖怪——乌龙

转载于:https://www.cnblogs.com/6DAN_HUST/archive/2013/04/07/3003566.html

如何解决资料下载下来为index.html和PHP文件的问题?

最近很多Down友反映&#xff0c;在下载中心下载资料时&#xff0c;明明是pdf、rar、zip格式的文件&#xff0c;下载完后怎么就变成index.html、php格式的文件了&#xff1f;既浪费了下载豆&#xff0c;文件还不能用&#xff0c;心疼啊&#xff01;这是因为下载系统是动态获取的…

给大家推荐8个SpringBoot精选项目

前言 2017年&#xff0c;曾在自己的博客中写下这样一段话&#xff1a;有一种力量无人能抵挡&#xff0c;它永不言败生来倔强。有一种理想照亮了迷茫&#xff0c;在那写满荣耀的地方。 如今2018年已过大半&#xff0c;虽然没有大理想抱负&#xff0c;但是却有自己的小计划。下面…

点击Notification正确回调到之前已经放置在后台的Task中的对应Activity,而不是创建它的一个新实例...

NotificationManager notificationManager (NotificationManager)getSystemService(NOTIFICATION_SERVICE);Notification notification new Notification(R.drawable.logo_icon_16,"移动营销", System.currentTimeMillis());Intent intent new Intent(Intent.ACTI…

函数返回类的对象与拷贝构造函数

C中&#xff0c;如果我们在一个函数中&#xff0c;定义了一个类的对象&#xff0c;然后返回这个对象&#xff0c;在main函数中用一个对象去接受这个返回的对象的时候&#xff0c;这里面参与的函数调用大家可能不熟悉&#xff0c;这里通过程序和注释的方式给大家讲解一下。编译的…

ai条码插件免安装_ai条码插件2款下载|Barcode Toolbox插件+Barcode条码插件下载 - 偶要下载站...

本次一次性打包两款ai条码插件和大家分享&#xff0c;分别是Barcode Toolbox插件和Barcode脚本插件&#xff0c;支持Illustrator CS5~CC2015的条形码脚本&#xff01;这两个插件不是一个插件&#xff0c;是有区别的两个插件。Barcode Toolbox是AI的一个非常有用的生成条码的插件…

GridView的DataKeyNames属性 转载的

偶今天用到这个了,转载 "事在人为"楼主的,原文地址: http://www.cnblogs.com/andhm/archive/2010/05/07/1730024.html DataKeyNames表示主键的列名&#xff0c;可以通过GridViewEntity.DataKeys[RowIndex]["ColumsName"]来获取他的值&#xff0c;当然它是…

反射 -- 通过字符串操作对象中的成员

getattr()setattr()hasattr()delattr()class C:def __init__(self, name):self.name namedef f(self):return Pythonobj C(Pyhton) get_name getattr(obj, name) get_func getattr(obj, f) get_func() hasattr(obj, name) setattr(obj, age, 10) delattr(obj, name)转载于:…

android默认exported_android:exported 属性详解

转自http://blog.csdn.net/watermusicyes/article/details/46460347昨天在用360扫描应用漏洞时&#xff0c;扫描结果&#xff0c;出来一个Android:exported属性&#xff0c;其实之前根本不知道这个属性&#xff0c;更不知道这个属性用来干嘛的&#xff0c;详情见下图&#xff1…

Chipset

Chipset 芯片组是一组集成电路&#xff08;芯片&#xff09;用于管理计算机处理器、内存和外设的数据流&#xff0c;通常位于主板上。 Northbridge (Memory Controller Hub) 北桥用来处理高速信号&#xff0c;负责CPU、RAM、AGP和PCI Express之间的通信。 Southbridge (I/O Con…

正确设置php-fpm和nginx防止网站被黑

2019独角兽企业重金招聘Python工程师标准>>> 核心总结&#xff1a;php-fpm 子进程所使用的用户&#xff0c;不能是网站文件所有者。 凡是违背这个原则&#xff0c;则不符合最小权限原则。 根据生产环境不断反馈&#xff0c;发现不断有 php网站被挂木马&#xff0c;绝…

一个数字键盘引发的血案——移动端H5输入框、光标、数字键盘全假套件实现...

https://juejin.im/post/5a44c5eef265da432d2868f6 为啥要写假键盘&#xff1f; 还是输入框、光标全假的假键盘&#xff1f; 手机自带的不用非得写个假的&#xff0c;吃饱没事干吧&#xff1f; 装逼&#xff1f;炫技&#xff1f; 宝宝也是被逼的&#xff0c;宝宝也很委屈~.~ …

姿态检测 树莓派_怎样在树莓派上轻松实现深度学习目标检测?

原标题&#xff1a;怎样在树莓派上轻松实现深度学习目标检测&#xff1f;雷锋网按&#xff1a;本文为 AI 研习社编译的技术博客&#xff0c;原标题 How to easily Detect Objects with Deep Learning on Raspberry Pi&#xff0c;作者为 Sarthak Jain。翻译 | 小哥哥 狒狒 校对…

Linux目录读写和可执行权限

一 . 进入目录权限如果我在普通用户下创建了一个目录f1&#xff0c;然后使用chomd u-rwx,g-rwx,o-rwx之后&#xff0c;我在普通用户下想进入f1目录&#xff0c;权限不允许。然后我切换到超级用户下&#xff0c;再次尝试进入到f1目录&#xff0c;这个时候允许进入。然后回到普通…

【译】表变量和临时表的比较(转)

关于表变量是什么&#xff08;和表变量不是什么&#xff09;&#xff0c;以及和临时表的比较让很多人非常困惑。虽然网上已经有了很多关于它们的文章&#xff0c;但我并没有发现一篇比较全面的。在本篇文章中&#xff0c;我们将探索表变量和临时表是什么&#xff08;以及不是什…

grub加密。

一、介绍 安全无小事 linux系统的安全分为很多方面&#xff0c;什么端口啊&#xff0c;什么网络啊&#xff0c;听着都特么烦&#xff0c;今天谈谈最简单明显的密码安全。 二、单用户模式 单用户模式个人觉得相当有用&#xff0c;可以用来修复系统&#xff0c;修改密码…… 但是…

Linux下stat + 文件名后, Access,Modify,Change的含义

我们首先在一个目录下创建了一个文件使用命令touch file然后输入命令&#xff1a;stat file&#xff0c;这个时候会输出一系列信息大家注意红色框中的三个时间Access : 文件最近一次被访问的时间Modify: 文件内容最近一次被修改的时间Change: 文件属性最近一次被改变的时间接着…

基于设计模式的学习之旅-----访问者模式(附源码)

基于设计模式的学习之旅-----访问者模式 1、初始访问者模式 2、什么是访问者模式 表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 3、模式结构图 4、模式代码事例 场景&#xff1a;年会&#xff0c;每个小组表演…

x is y python_Python 基础

2.1 程序与用户交互在python3中#input&#xff1a;无论用输入何种类型&#xff0c;都会存成字符串类型nameinput(please input your name:) #name18print(id(name),type(name),name)在python2中#raw_input与python3的input是一样的nameraw_input(please input your name:)print…

【leetcode 简单】 第八十九题 赎金信

给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串&#xff0c;判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成&#xff0c;返回 true &#xff1b;否则返回 false。 (题目说明&#xff1a;为了不暴露赎金信字迹&#xff0c;要从杂…