变量与运算符

本篇以读者知道 intcharfloatdouble 等数据类型为前提条件。

float 类型注意事项

float 类型数没有办法跟一个数真正比较是否相等,可以定义借助绝对值在一定误差范围内视为相同:

if ( fabs(f-0) <= 1e-6)

#define

#define 的处理在程序的预处理阶段,占编译时间,不占运行时间。缺点是不检查语法,只是单纯的宏体与宏名之间的替换。

用 define 定义宏函数:

#define MAX(a,b)	\
({ int A=a, B=b; ((A) > (B) ? (A) : (B)); })

定义变量

定义变量语法:[存储类型] 数据类型 标识符 = 值

存储类型

  • auto:默认存储类型。

    • 不初始化则为乱值,不会自动初始化为 0 值或空值;
    • 自动分配空间,自动回收空间。
  • register:(建议型1)寄存器类型。

    • 只能用来定义局部变量,不能定义全局变量;
    • 大小有限制,只能定义 32 位大小的数据类型,如 double 类型就不可以;
    • 寄存器没有地址,所以一个寄存器类型的变量无法打印出地址进行查看或使用。

    1 建议型的意思是建议 gcc 分配为寄存器类型,至于是否分配为寄存器类型,由 gcc 自己做主,gcc 不会轻易把变量放入寄存器中

  • static:静态类型。可以修饰变量和函数,将变量或函数的作用域限制在当前文件中,外部文件无法引用。

    • 自动初始化为 0 值或空值;
    • 只使用同一块空间,所以值有继承性。
  • extern:说明型关键字。不能改变被说明的变量的类型或值。

运算符

  • 算术运算符:+ - * / % ++ -- ……
  • 关系运算符:< <= == >= > !=
  • 逻辑运算符:&& || !
  • 位运算符:<< >> & | ^ ~
  • 赋值运算符:=
  • 条件运算符(三目运算符):? :
  • 逗号运算符:,
  • 指针运算符:* &
  • 单目运算符(判断数据类型长度):sizeof()
  • 强制类型转换:char int float double ……
  • 分量运算符:. ->
  • 下标(索引)运算符:[]
  • 其他:()

位运算

左移与右移

<< 左移 shl

a << b,表示 a 的二进制数向左移动(在后面添 0)b 位

例如:6 << 3

(6)10 = (0110)2 向左移动三位变成 (0011 0000)2 = (48)10

左移运算,相当于 a * 2b,即 6 << 3 = 6 * 23 = 6 * 8 = 48

>> 右移 shr

与左移相反,a >> b,表示 a 的二进制数向右移动 b 位

例如:36 >> 2

(36)10 = (0010 0100)2 向右移动两位变成 (0000 1001)2 = (9)10

右移运算,相当于 a / 2b,即 36 >> 2 = 36 / 22 = 36 / 4 = 9

& 与运算 and

两个二进制数相同位的两个数字都为 1,则结果为 1;其中一个不为 1,则结果为 0

例如:12 & 10

(12)10 = (1100)2

(10)10 = (1010)2

结果为 (1000)2 = (8)10,即 12 & 10 = 8

与运算可以判断一个整数的奇偶,把这个整数跟 1 进行与运算,结果为 0 则该数为偶,结果为 1 则该数为奇

| 或运算 or

两个二进制数相同位的两个数字有一个为 1,则结果为1;只有两个都不为 1,结果才为 0

例如:10 | 6

(10)10 = (1010)2

(6)10 = (0110)2

结果为 (1110)2 = (14)10,即 10 | 6 = 14

^ 异或运算 xor

相同位两数不同则为 1,否则为 0

例如:10 ^ 6

(10)10 = (1010)2

(6)10 = (0110)2

结果为 (0010)2 = (2)10,即 10 ^ 6 = 2

一个数进行两次相同的异或运算结果是它本身,由此可以通过异或运算交换两数:

a = 11;
b = 9;
a = a ^ b;
b = a ^ b; // 相当于 b = (a ^ b) ^ b = a
a = a ^ b; // 相当于 a = (a ^ b) ^ a = b
printf("a = %d, b = %d\n", a, b); // a = 9, b = 11

分析:

第一次 a = a ^ b = (11)10 ^ (9)10 = (1011)2 ^ (1001)2 = (0010)2 = (2)10

第二次 b = a ^ b = (2)10 ^ (9)10 = (0010)2 ^ (1001)2 = (1011)2 = (11)10

第三次 a = a ^ b = (11)10 ^ (2)10 = (1011)2 ^ (0010)2 = (1001)2 = (9)10

~ 取反运算 not

将一个二进制数所有位全部取反。做此运算时需特别注意是否有符号位

例如:~ (11)10 = ~ (1011)2 = (0100)2 = (4)10

位运算常用运算

  • 将操作数中第 n 位置 1,其他位保持不变:num = num | 1 << n;
  • 将操作数中第 n 位置 0,其他位保持不变:num = num & ~(1 << n);
  • 测试第 n 位是 0 还是 1:if(num & 1 << n)

快速复习C语言 - 1变量与运算符的更多相关文章

  1. 2.2JAVA基础复习——JAVA语言的基础组成运算符和语句

    JAVA语言的基础组成有: 1.关键字:被赋予特殊含义的单词. 2.标识符:用来标识的符号. 3.注释:用来注释说明程序的文字. 4.常量和变量:内存存储区域的表示. 5.运算符:程序中用来运算的符号 ...

  2. Java之--Java语言基础组成(关键字、标识符、注释、常量和变量、运算符)

    Java语言基础组成-关键字.标识符.注释.常量和变量.运算符 Java语言由8个模块构成,分别为:1.关键字:2.标识符(包名.类名.接口名.常量名.变量名等):3.注释:4.常量和变量:5.运算符 ...

  3. 第二十一节:Java语言基础-关键字,标识符,注释,常量和变量,运算符

    Java语言基础-关键字,标识符,注解,常量和变量,运算符 class Demo { public static void main(String[] args){ System.out.printl ...

  4. C语言---程序的一般形式、数据类型、常量变量、运算符、表达式、格式化输入输出

    1. 程序的一般形式 (1)注释 ① 分类:单行注释( // ): 注释一行.多行注释( /**/ ): 在这个区间内,都属于多行注释,可以换行. ② 作用:提示代码的作用,提示思路   不写注释的后 ...

  5. iOS开发环境C语言基础 变量 、 数据类型和变量赋值 、 其他 、 运算符

    1 变量使用常用错误汇总 1.1 问题 在我们使用变量的过程中,会遇到一些问题,在此将这些问题进行汇总,在今后使用的过程中,不出错.即使出现错误也可以很快地找到问题所在. 1.2 方案 变量在使用的过 ...

  6. 第二十六节:复习Java语言基础-Java的概述,匿名对象,封装,构造函数

    Java基础 Java语言概述 Java语言 语言 描述 javaee 企业版 javase 标准版 javame 小型版 JDK JDK(Java开发工具包) Java语言 语言 Java语言 Ja ...

  7. 复习C语言基础知识(day02)

    一.大型软件组织 定义规则,规则就是协议.用户和中介的接口. 软件开发的过程: 定义规则,定义协议.软件为用户提供的功能. 在C语言中使用接口实现.接口就是函数. 两种用户 函数的使用者 函数的实现者 ...

  8. Shell基础:变量类型 & 运算符

    Shell变量 Shell支持三种类型的变量 用户自定义变量:用户自定义的变量,变量名以英文字母或下划线开头,区分大小写. 位置变量:根据位置传递参数给脚本的变量,默认支持9个位置变量 $1,$2,$ ...

  9. 数据库基础(变量、运算符、if语句、while语句)

    数据库基础(变量.运算符.if语句.while语句)   变量: 定义变量:declare @变量名 数据类型 变量赋值:set @变量名 = 值 输出:print 变量或字符串 SQL语言也跟其他编 ...

随机推荐

  1. js获取session对象

  2. 如何优雅的使用Fegin去构造通用的服务调用的API

    第一步: 创建一个公共的API服务:命名为api(根据自己实际情况进行命名) <?xml version="1.0" encoding="UTF-8"?& ...

  3. Spring Cloud学习 之 Spring Cloud Hystrix(流程分析)

    Spring Boot版本:2.1.4.RELEASE Spring Cloud版本:Greenwich.SR1 我们还是从流程图入手: 创建HystrixCommand或者HystrixObserv ...

  4. Kafka的参数调优

    这篇文章主要说一下在生产过程中的kafka常用的调优参数, 首先kafka的版本是0.9.0.1,针对以下几个方面来说, 针对kafka的堆内存: 针对kafka的集群调优: kafka的的消息机制有 ...

  5. 你的团队需要一个正确的程序集(dll)管理姿势

    很多团队经历时间的积淀之后,都会有很多的可重用的公共技术组件.大部分的团队都会把这些公共组件生成程序集(dll)后,放到GIT或SVN的一个公共目录里面,以供各个项目中使用.起初在项目很少又或者是公共 ...

  6. 设计模式之GOF23策略

    策略模式strategy 场景:对不同客户的不同报价策略 如果采用if else不易扩展,不符合开闭原则,可以采用策略模式 策略模式: 对应于解决某一个问题的算法族,允许其中一个算法去解决某一问题,同 ...

  7. 设计模式GOF23之单例模式

    单例模式的五种方式 主要:懒汉式,饿汉式 其他:双重检测锁(Double Checking模式),静态内部类,枚举模式 选取时机 延时加载,占用内部资源大:静态内部类好于懒汉 不延时加载,占用内部资源 ...

  8. python解析谷歌在线表格链接,转化为数组形式,图片转化为链接

    在线表格已成为趋势,传统的表格导入导出已经不能满足现在企业的发展. 必须支持在线表格的导入,只需要输入在线表格的链接,就能将数据读取出来. 而且相比相传表格,能够将图片信息一块读取.在线表格中的图片也 ...

  9. PHP带标签的字符串去除标签,计算字符串长度的两种格式,截取字符串

    $str = "<p>看地方撒地方<i>fdsafsdfsd</i><img src="/static/img/fdsf.jpg" ...

  10. html5 canvas画云

    使用函数画出天空的云层图像: y 主要使用到的是数学的圆与弧度之间转换关系: 代码如下 //div对象 var parentContainer = document.getElementById(&q ...