C符号之逻辑运算符 左移与右移 自增自减

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

本篇文章将总结C中一些比较有趣的符号

逻辑运算符:“ || ”“ && ” 是比较常用的逻辑运算符,分别是

或(||):双目运算符。两者中任一为真即为真。

与( &&):双目运算符。两者都为真时才为真,任一为假即为假。

但是,这两个运算符都有一个有趣的地方。请看下面的例子:

int    a=0, b=1;if( b++ || ++a ){     printf("%d", a);}

编译通过。运行结果是  0 。

这就奇怪了。 ” || “ 不是判断两个数是否为真吗?没错,确实是判断了,但是这里只是判断了前面的一个,因为检查到前者为真了,所以后者就不检查了,不检查也即不执行了。因为 ” ||“只需两者任一为真就为真。所以直接执行判断前者,如果为假才再去执行后者进行判断。哈哈,是不是很聪明呢?(其实是太懒了)

同样,对于 ” && “ 也是这样。也可以试试运行下面这例子。 

int    a=0, b=1;if( ! ( a && ++b) ){     printf("%d", b);} 


左移(<<)与右移(>>):

两者都为双目运算符。两者在移位时都遵循各自的特点。

“<<”:移动时,高位丢弃,地位补0。

“>>”:移动时,对于有符号数,其符号位将随同移动。当为整数时,最高位补0;而为负数时,符号位为 1,最高位是补 0 或是补 1 取决于编译系统的规定

在这个运算符的学习过程中,我结合了前面的大端、小端模式。这是计算机存储数据的模式。通过测试后,本人的计算机为小端模式。并结合小端模式和左移、右移运算符的知识。发觉数据存储模式并不会影响左移、右移运算符的操作。这就衍生了一个新的问题,大端、小端模式对什么有影响?在什么情况下有影响?

下面来看看一个例子:

0x01<<2+3
不要惊讶,结果是32,因为优先级的问题,+ 比 << 优先级要高

那这两个呢?

0x01<<2+30;0x01<<2-3;
编译运行,是不行的,因为

  1. 左移和右移的位数是不能超出数据的长度
  2. 也不能小于0


自增(++)与自减(— —):

a ++:先用再加

++ a:先加再用

自减运算符同样。

这两点太基础了,也太普通了。下面我们来看点有意思点的。

int    a=1, b=1;printf("%d", a+++b);   //语句 1
语句 1 是什么意思?呵呵,这里就要说说 贪心法 了。

C语言有这样一个规则:每一个符号应该包含尽可能多的字符。也就是说,编译器将程序分解成符号的方法是,从左到右一个一个字符的读入,如果该字符可能组成一个符号,那么再读入下一个字符时,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号。这个处理的策略被称为 “贪心法”

现在我们知道C语言有这样的规则,对 语句 1 的意思也有明白了。没错,a+++b 等于a++ + b

如果是换成这样子呢?a+++++b?又会怎样?

编译不通过。我们换种写法,改为a+++ ++b。这个时候编译通过了!这里我们再次根据”贪心法“去思考这个问题。就恍然大悟了!

这里也总结了一件事,理论还是理论。即使你明白,理解。但是没有经过实践的话,是不会掌握的!就如  a+++++b  一样,你不去实践,按照理论去想的话。肯定能编译通过的,但是你实践了,才知道是错误的。



           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

年轻的工程师如何月入伍万XD

郑昀&#xff1a;你要跟谁比&#xff1f;关键词&#xff1a;成长&#xff0c;自我管理&#xff0c;自我激励&#xff0c;面试&#xff0c;候选人201806 ——你觉得跟你的 Leader 差在什么地方&#xff1f;——肯定有差距&#xff0c;一个是知识面不如他广&#xff0c;二一个是解…

字符串翻转

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;《递归入门》字符串翻转&#xff1a;将字符串…

Java学习之SpringBoot整合SSM Demo

背景&#xff1a;在Java Web中Spring家族有着很重要的地位&#xff0c;之前JAVA开发需要做很多的配置&#xff0c;一堆的配置文件和部署调试一直是JavaWeb开发中的一大诟病&#xff0c;但现在Spring推出了SpringBoot&#xff0c;提供了快速单机部署调试和注解配置的便利。作为一…

Java别说取余( )运算简单,你真的会吗

一&#xff0c;直击现场下面我来抛出几道题&#xff1a; 说明m是商&#xff0c;n是余数&#xff1b; &#xff08;1&#xff09;正数%正数 3%2m…….n 2%3m…….n (2)正数%负数或者负数%正数 -3%2m…….n 3%-2m…….n -2%3m…….n 2%-3m…….n (3)负数%负数 -3%-2m…….n -2%-3…

centos6 5从命令行进入图形界面

一&#xff0c;安装图形界面包组 yum groupinstall “Desktop” -y yum groupinstall “X Window System” -y之所以加 -y 是为了一会安装的时候不用再确认了。不加-y也行。不过一会儿有可能有很多选项需要你确认&#xff1b;二&#xff0c;进入图形界面 startx从图形界面到命令…

decimal这个数据类型的用法,保证你看懂

笔者在网上搜了好久&#xff0c;解释都晦涩难懂。最后通过亲手实践加课本知识得出结论如下&#xff1a; decimal(M,N) M表示:不包括小数点&#xff0c;不包括符号位&#xff0c;所能存数字的总位数&#xff08;包括小数部分和整数部分&#xff09; N表示&#xff1a;小数部分…

前端与后端接口的交互案例

一、案例描述1&#xff0c;前端页面提供用户名&#xff0c;密码输入框。 2&#xff0c;通过Ajax发送请求到后端Serlvet。 3&#xff0c;后端Serlvet处理请求&#xff0c;根据输入的用户名和密码返回给前端不同信息前端访问后端接口通过后端提供的的URL二、主要代码1、前端页面&…

20172301 2017-2018-2《程序设计与数据结构》课程总结

20172301 2017-2018-2《程序设计与数据结构》课程总结 每周作业链接汇总 预备作业1 简要内容:对上学期的认识和总结&#xff0c;对专业和老师的期望。预备作业2 简要内容:关于技能和学习技能经验。预备作业3 简要内容:安装虚拟机和Linux命令学习。第一周作业 简要内容: 计算机系…

软链接和硬链接到底有啥作用和区别

前言&#xff1a;在网上搜索了好久&#xff0c;看了很多博客&#xff0c;某度知道等等。关于软硬链接的解释都太模糊&#xff0c;还有什么i节点&#xff0c;跨分区根本弄不明白&#xff0c;在查阅了书籍和询问老师后决定自己写一篇简单的博文&#xff0c;然初学者都能够明白的博…

python执行gradle脚本

1 import os2 import shutil3 import subprocess4 5 #拷贝文件6 def copyFile(srcFile, dstFile):7 #检查源文件是否存在8 if not os.path.isfile(srcFile):9 print(%s not exist % srcFile) 10 return False 11 #如果目的路径不存在创建目录 12 …

redis 批量删除操作

redis 原生删除方法 del key1 key2 ... 只支持显示删除 使用*通配符 和 xargs可以很方便地进行批量删除 形式如下&#xff1a; redis-cli -h 192.168.1.45 -p 6379 keys "*" | xargs redis-cli -h 192.168.1.45 -p 6379 -n 6 del *通配符&#xff1a;匹配所有字符 补…

c语言怎么做到四舍五入

一&#xff0c;总结如下这里笔者就不谈Math.h中的round()函数了。它是可以做到的&#xff0c;但是据说这个函数和编译器有关系。所以在这里就不介绍了。 我的方法很简单&#xff1a;#include<stdio.h> int main(){ double d1,d2,d3; d1-3.1415926; d2(int)(d1*1…

c++ 的makefile文件实例

首先声明&#xff0c; 感谢九哥的帮助&#xff0c;因为从来没写过makefile&#xff0c; 所以一直是手动编译&#xff0c; 然后有一次写了三个文件&#xff0c; 需要编译&#xff0c; 而我只编译了一个文件&#xff0c; 所以一直出错&#xff0c; 九哥告诉我用makefile更方便&am…

操作系统短作业优先(SJF)调度算法

一&#xff0c;算法代码#include<stdio.h>struct sjf { //定义进程的结构体 char name[10];//进程名 float arrivetime;//到达时间 float servicetime;//服务时间 float starttime;//开始时间 float finishtime;//完成时间 float zztime; //周转时间 …

git add -A 、git add -u 、 git add . 三种区别

git add -A 提交所有变化 git add -u 提交被修改(modified)和被删除(deleted)文件&#xff0c;不包括新文件(new) git add . 提交新文件(new)和被修改(modified)文件&#xff0c;不包括被删除(deleted)文件 转载于:https://www.cnblogs.com/php08049/p/9214175.html

操作系统进程调度先来先服务FCFS

一&#xff0c;实验的流程图二&#xff0c;实验代码注&#xff1a;本代码主要来自豆丁&#xff0c;加入本人的部分修改。。//本FCFS是用不带都结点的链表完成。当然也可以用其他数据结构 #include<stdio.h>#include<stdlib.h>typedef struct PCB //定义进程控…

如何给SAP Cloud Connector Region列表中添加新的Region

SAP help里提供了CloudFoundry和Neo环境下可用的Region和API endpoint&#xff1a; 当我们期望用SAP Cloud Connector连接某个SAP云平台Region时&#xff0c;一般是从F4 value help里选择&#xff1a; 如果drop down list里没有我们希望使用的region怎么办&#xff1f; 解决方案…

java 8 中文API

java 1.6 帮助文档中文链接&#xff1a;http://download.csdn.net/detail/qw599186875/9608735Java1.8 帮助文档中文 – 谷歌版在线版: https://blog.fondme.cn/apidoc/jdk-1.8-google/ 下载链接&#xff1a;http://download.csdn.net/detail/qw599186875/9802192中文 – 有道版…

Swift - 循环强引用,内存泄漏

https://www.hangge.com/blog/cache/detail_742.htm 转载于:https://www.cnblogs.com/saytome/p/9219073.html

CUDA从入门到精通

CUDA从入门到精通&#xff08;零&#xff09;&#xff1a;写在前面在老板的要求下&#xff0c;本博主从2012年上高性能计算课程开始接触CUDA编程&#xff0c;随后将该技术应用到了实际项目中&#xff0c;使处理程序加速超过1K&#xff0c;可见基于图形显示器的并行计算对于追求…