《C语言参悟之旅》-读书笔记(二)

C语言参悟之旅pdf C语言参悟之旅 立即下载

                                                             第三章  运算符、表达式和语句

1.在表达式中使用(   )是一种很好的编程方式能大大提高程序的可读性如:

           标准C中对很多运算符的求值顺序都没有进行明确规定,实现顺序与具体实现有关( 编译环境)

                                                                       -a +b / 2 - c * 5

           是先求 b / 2还是 c * 5 取决于具体实现(虽然此处先求那个都不会影响表达式的值,但有些情况下表达式的求值顺序可能会对表达式的值产生影响)

           比较好的做法是

                                                                      (-a +b / 2 )- c * 5

           该表达式会严格按照上述步骤来求值

2.算数运算符

      /

      1)当两个运算对象都为整数时,运算符' / '会通过舍弃小数部分的方法截取结果 1/2的结果不是0.5,而是0

      2)如果两个运算对象中有一个是负数,那么除法的结果可能是向上取整,也可能是向下取整(与编译器有关)

 

              

                                          

     %                            

      1)两个运算对象都必须是整数

      2)x % y的符号与具体的实现有关

    

    =

      1)

           x = y = z = 100;                     等效于               x = ( y = ( z= 100));( 右结合 )

          在变量说明的时候:

          不允许给多给变量连续赋初值,如下面是错的:

          int a = b = c =100;

          应该写成:

         int  a = 100, b = 100, c = 100;

      2)避免写出这样的表达式

              int  x = 10;

              y = ( x +1 ) - ( x = 2 )

              如果从左向右算结果为9; 如果从右向左算结果为1

3.类型转换

   1)两个float型数参加运算,虽然他们的类型相同,但仍然先转换为double型再进行运算,运算结果也为double

            long + int一起运算也要先转换为long,然后在进行运算,运算结果也为long

            unsigned  int  + int 要先转换成 无符号整数在进行运算,结果也是无符号整数(-10会转换成一个很大的整数)

   2) char型和int

     int型数值赋给char,只保留其最低8位,高位部分舍弃

     char型数值赋给int型变量,一些编译器不管其值大小都当作整数处理,而另一些编译软件在char的值大于127,就作为负数处理

  3) 防止溢出(隐藏的自动转换)

          

在VS中并没有报错,我猜想是编译器做了一定的处理了,正常情况下i * i的结果也应该是short型的,结果为short型的,short放不了那么大的数,会溢出

4.自增自减运算符

   1)避免一个表达式中对同一个变量的多次使用自加、自减运算符:
       ( i++ ) + ( i-- ) + ( i++ )           这样写的话表达式的求值顺序不确定(取决于编译器 )

 

       比较合适的做法:

           i++;

           i- -;

           i++;

   2)printf(" %d%d", ++i, i++);         有的编译器的求值顺序是从左到右,有的是从右到左  

          比较合适的做法:

          printf( "%d", ++i ) ;

          prinft(" %d", i++ );

   3) - - -i 相当于-(- - i)前自增(减)和一元的正负号的优先级相同,是右结合

      - j + + 相当于 - ( j ++ )后自增(减)的优先级比一元的正负号高   

   4)*iter++等效于 *(iter++) //后自增(减)的优先级比一元的正负号高

        *- -iter等效于*(- -iter)  前自增自减优先级和*、是一样的是右结合

5 .逻辑运算中的“短路”运算

6 .位运算

   1)最快地实现2的3次方:

         使用左移运算符"  << "左移两位

         左移时:右端补0,高位移出的部分舍弃;

注:

    如果左端移出的部分含有有效二进制数1,这个特性就会消失(实现最快速度的乘2操作 )

   2)  右移运算符   >>    

        右移时:右端移出的部分舍弃,左端的数有两种情况

        I :对于无符号和正整数,高位补0,对于负整数,高位补0还是补1取决于具体实现;有的系统是补0

     

逻辑右移:

       

 II: 有的系统是高位补1,

   算术右移:

 

3 )按位与      &

      z = x & y;

      常用在: 方便实现清零或取某个位(如网络地址) 

3 )   按位或       |

         z = x | y;

  4) 按位异或    ^        口诀:"相同为0,不同为1"

         z = x ^ y;

        常用在数据加密中
       

 5) 按位取反

       z = ~ x;

7 sizeof 

   sizeof( i + 1 )等价于 sizeof( i ); 

 

 

【无人机基站】基于K-mean算法实现无人机基站部署附matlab代码 阅读详情

相关推荐

Simulink实战:火电机组一次调频与AGC协同控制建模与仿真解析

本文详细解析了如何使用Simulink进行火电机组一次调频与AGC协调控制的建模与仿真。通过系统架构设计、参数设置和模块实现,阐述了如何实现两者的协同控制,确保电网频率稳定。文章提供了实用的建模技巧、参数整定经验和性能评估方法,为电力系统仿真工程师提供了有价值的实践指导。

c7d8e9的博客 309

python抛出exception写法_Python之异常处理

我们在写程序时,有可能会出现程序报错,但是我们想绕过这个错误执行操作。即使我们的程序写的没问题,但是在运行时也可能会出错,这是我们就需要将异常抛出来解决,如下代码:print(name)print("1111")在上面的代码中,我们想打印输出 name 值,但是我们并没有提前声明该变量,所以程序会抛出异常,但我们并不想让程序报错,可以如下解决:try:print(name)exceptNameE...

weixin_39935257的博客 1474

分析国外几款主流蜜罐产品看欺骗诱捕技术的应用脉络

网络安全的本质是攻防对抗,更本质的其实是人与人心智与技术的全面较量。 欺骗诱捕技术作为攻防对抗技术中比较特殊的技术,能够使防守方更多掌握对抗中的主动权,诱导攻击,迫使攻击者耗费精力的同时,留下丰富的攻击信息。究其本质,欺骗诱捕技术更深层次考验的不止是技术的能力,还有对于攻击者作为人的理解。 国外主流蜜罐产品分析 根据MarketsandMarkets《欺骗技术市场规模、份额和2021年全球市场预测》中提到的欺骗诱捕技术全球主要供应商及产品,我们分析了几款国外主流的蜜罐产品,希望更清晰看到欺骗诱捕技术应

cdyunaq的博客 1310

python 练习1

##python test## 1. 编写脚本,使用print语句编写脚本在屏幕上显示你名字、年龄、最喜欢的颜色和与你相关的一些事情(背景、兴趣、爱好等等);     2. 阅读下面的 Python 脚本: #!/usr/bin/env python 1 + 2 * 4   a) 你认为这段脚本是用来做什么的? 答:计算 b) 你认为这段脚本会输出什么?     答

a10742864的博客 742

LightGBM学习笔记

LightGB学习笔记1. lightgbm概述1.1 lightgbm介绍1.2 lightgbm和xgboost对比2 .直方图算法及改进2.1 直方图算法2.2 直方图算法改进2.2.1 GOSS算法3.树的生长策略4.系统设计5. 实战 lightgbm是基于boosting的学习框架,使用的是基于决策树的学习算法,具有更快的训练速度、更低的内存使用、更高的正确率、并且能够支持并行化学习,可以用来处理大规模数据,本文主要是针对学习视频https://www.bilibili.com/video/BV

一一xi的博客 3306

Pyrosim进阶指南:从隧道火灾模拟到复杂通风策略分析

本文深入探讨Pyrosim在隧道火灾模拟与通风策略分析中的高级应用。从精确几何建模到火源参数设置,再到通风系统的量化分析,详细介绍了如何利用Pyrosim优化隧道安全设计。特别强调了临界风速验证、横向通风配置及结果可视化技巧,为工程师提供实用的进阶指南。

weixin_30644369的博客 138

matlab同时给多个变量赋值(deal)

matlab同时给多个变量赋值例子1:对x,y,z同时初始化为100例子2:对a,b,c分别初始化为mat,lab,sky例子3:将Cell数组x={1 2 3}中的1,2,3分别赋值给a,b,c例子4:将cell数组x={1 2 3}分别付给结构数组y的data字段例子5:将结构体数组A的age字段全部赋值为0 转载自 MATLAB中一条语句给多个变量赋值(转载)_了凡春秋_新浪博客 http:...

小琳子要开心呀 5万+

VASPKIT绘制平面平均电荷差分密度

平面平均密度差(planar-averaged electron density difference)是密度差的衍生。密度差是个三维空间函数,经常通过绘制平面图、等值面图方式图形化考察。虽然这两种图很直观,但平面图会受到截面选取的影响,而等值面图会受到等值面数值(isovalue)选取的影响,因此都有一定任意性,也不容易定量讨论。对于电子转移有比较明确方向的情况,可以绘制平面平均密度差曲线,由此可以清楚地考察垂直于选取的方向上每个截面上的密度差积分值,在定量讨论、对比上比较便利。

weixin_43948934的博客 1万+

c语言中x=y=100合法吗,【单选题】已知:int x; int y[10]; 下列合法的选项是( )。 A. &x B. &(x+3) C. &5 D. &y...

【单选题】已知:int x; int y[10]; 下列合法的选项是( )。A. &xB. &(x+3)C. &5D. &y更多相关问题根据C语言的语法规则,下列字符串中哪些是关键字或保留字 ()A.automateB.readerC.staticD.input下面程序的输出结果是 () main() { int x,y,z; x=0,y=z=-1; x+...

weixin_31863707的博客 1822

C51:PWM+舵机角度控制

PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%.脉冲宽度调制通过占空比编码模拟信号一个周期内,高电平占据时长的百分比如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制。

qq_73379310的博客 3389

华为OD机试 - 直捣黄龙 - 广度优先搜索BFS(Python/JS/C/C++ 新系统 200分)

从样例 1 可知:5 / 2,2 -> 输出 2 9如果按“移动步数”计算应该是 8,但题目输出是 9,说明这里的“路径长度”统计的是 路径上经过的节点数量。最短路径条数:ways[end]路径长度:dist[end] + 1。

学Java,找哪吒 125

《C语言参悟之旅》 -读书笔记(一)

最近在看《C语言参考之旅》,感觉这本书不错,作者有用心去写,也写出了一些实际开发过程中雪要注意的细节,和高校教师所编的书还是有一定区别,初看好像很简单,但仔细看还是有一定的深度,适合掌握了一些基本语法的 C语言学习者学习,本文记下了阅读过程中自己认为比较重要而在学校教材里没有讲透彻的地方摘录下来

linuxlinuxlinuxlinux的专栏 1406

【原理图PCB专题】Allegro模块化移动器件报...has the LOCKED property怎么解锁?

正常来说做好一个模块化,如果不需要再动,最好还是lock,防止不明白的工程师异动导致问题。如果复用布局设计时,因为有些器件和拓扑并不完全一致,那需要调整部分器件,被锁之后只能全选,无法修改。所以解开锁定后,就能正常编辑了。

一点硬件 2393

c语言参悟之旅,《C语言参悟之旅》-读书笔记(一)

第一章 程序设计与C语言1.什么是计算机程序?计算机程序是指能使计算机做出信息处理行为并产生一定结果的指令集和(就像做菜的菜谱)2.高级语言的执行方式?( 1 )采用编译方式编译----->编译----->链接----->生产可执行文件(2)解释方式利用针对某种高级语言的解释软件,解释所遇到的高级语言中的每个操作并完成这些操作所要执行的动作高级程序员程序----------...

weixin_42521276的博客 355

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

《C语言参悟之旅》-读书笔记(八)

第九章   结构体和共用体 一、结构体 由一系列具有相同类型或不同类型的的数据构成的数据集合(但不能包含函数类型) 1.定义   1)第一种形式 struct 结构体类型名 { 数据类型名1 成员名1; ......... 数据类型名2 成员名2; }; struct 结构体类型名 变量名列表;   2)第二种形式 struct 结构体类型名 {

linuxlinuxlinuxlinux的专栏 1591

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

《C语言参悟之旅》-读书笔记(六)

第7章指针 C语言编写的程序至今仍能和汇编语言程序相媲美,其中一个重要原因就是拥有一种数据类型——指针(内存操作) 1.指针和地址   间接访问方式     通过变量来访问( 计算机用一个别称(变量)来标识存储单元,计算机在寻找内存的数据时就要先把这个别称翻译成地址才行  )  直接访问方式    通过地址来访问  ps:  变量其实就是内存存储单元的一个临时的别名,而地址才是这个存

linuxlinuxlinuxlinux的专栏 1282

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

《C语言参悟之旅》-读书笔记(四)

第五章 函数 Ps:     函数的语法本身并不复杂,真正需要编程者去理解和体会的往往是如何用函数来拆解问题,使用函数的水平直接反映在编程者能够组织多大规模的程序 1.C语言中的main( )函数           main( )函数可以调用任何C语言函数;           但任何C语言函数都不能调用main( )函数,main( )函数通常在其所属的程序执行时被操作系统调用。 2

linuxlinuxlinuxlinux的专栏 816

《C语言参悟之旅》-读书笔记(九)

第十章  文件 文件就是一组相关元素或数据的有序集合,每个集合都有一个符号化的指代(文件名) 文件通常都被存在外部存储器上,它只在需要使用时被调入内存 一.相关概念: 1.主要分类   1).  普通文件:驻留在磁盘或其他外部介质上的一些有序数据集,   2).设备文件(逻辑上的文件): 和主机相连的各种外部设备:如显示器、打印机、键盘 2.流的概念  流就是表示文本输入(或输出)

linuxlinuxlinuxlinux的专栏 2226

《C语言参悟之旅》-读书笔记(三)

第四章   流程控制 1.流程图(当初学的时候觉得很麻烦,现在觉得对整理编程思路帮助还是很大) 2.顺序结构   3.分支结构  1)形式 (  else 总是与其前面最近的 if 配对 )        A . if(表达式)               语句;        B. if(表达式)             语句1;           else

linuxlinuxlinuxlinux的专栏 748

《C语言参悟之旅》-读书笔记(一)

第一章    程序设计与C语言            1.什么是计算机程序?               计算机程序是指能使计算机做出信息处理行为并产生一定结果的指令集和(就像做菜的菜谱)         2.高级语言的执行方式?              ( 1 )采用编译方式                                  编译----->编译----->链接--

Ac Dream 864
上一篇: 《C语言参悟之旅》 -读书笔记(一)
下一篇: 《C语言参悟之旅》-读书笔记(三)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值