快速复习C语言 - 1变量与运算符
变量与运算符
本篇以读者知道
int
、char
、float
、double
等数据类型为前提条件。
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变量与运算符的更多相关文章
- 2.2JAVA基础复习——JAVA语言的基础组成运算符和语句
JAVA语言的基础组成有: 1.关键字:被赋予特殊含义的单词. 2.标识符:用来标识的符号. 3.注释:用来注释说明程序的文字. 4.常量和变量:内存存储区域的表示. 5.运算符:程序中用来运算的符号 ...
- Java之--Java语言基础组成(关键字、标识符、注释、常量和变量、运算符)
Java语言基础组成-关键字.标识符.注释.常量和变量.运算符 Java语言由8个模块构成,分别为:1.关键字:2.标识符(包名.类名.接口名.常量名.变量名等):3.注释:4.常量和变量:5.运算符 ...
- 第二十一节:Java语言基础-关键字,标识符,注释,常量和变量,运算符
Java语言基础-关键字,标识符,注解,常量和变量,运算符 class Demo { public static void main(String[] args){ System.out.printl ...
- C语言---程序的一般形式、数据类型、常量变量、运算符、表达式、格式化输入输出
1. 程序的一般形式 (1)注释 ① 分类:单行注释( // ): 注释一行.多行注释( /**/ ): 在这个区间内,都属于多行注释,可以换行. ② 作用:提示代码的作用,提示思路 不写注释的后 ...
- iOS开发环境C语言基础 变量 、 数据类型和变量赋值 、 其他 、 运算符
1 变量使用常用错误汇总 1.1 问题 在我们使用变量的过程中,会遇到一些问题,在此将这些问题进行汇总,在今后使用的过程中,不出错.即使出现错误也可以很快地找到问题所在. 1.2 方案 变量在使用的过 ...
- 第二十六节:复习Java语言基础-Java的概述,匿名对象,封装,构造函数
Java基础 Java语言概述 Java语言 语言 描述 javaee 企业版 javase 标准版 javame 小型版 JDK JDK(Java开发工具包) Java语言 语言 Java语言 Ja ...
- 复习C语言基础知识(day02)
一.大型软件组织 定义规则,规则就是协议.用户和中介的接口. 软件开发的过程: 定义规则,定义协议.软件为用户提供的功能. 在C语言中使用接口实现.接口就是函数. 两种用户 函数的使用者 函数的实现者 ...
- Shell基础:变量类型 & 运算符
Shell变量 Shell支持三种类型的变量 用户自定义变量:用户自定义的变量,变量名以英文字母或下划线开头,区分大小写. 位置变量:根据位置传递参数给脚本的变量,默认支持9个位置变量 $1,$2,$ ...
- 数据库基础(变量、运算符、if语句、while语句)
数据库基础(变量.运算符.if语句.while语句) 变量: 定义变量:declare @变量名 数据类型 变量赋值:set @变量名 = 值 输出:print 变量或字符串 SQL语言也跟其他编 ...
随机推荐
- Linux的vi和vim编辑器
Linux中分为:一般模式,插入模式和底行模式 一般模式(通过按iaoIAO键)-->插入模式 插入模式(按Esc键)--> 一般模式 一般模式(通过按:键)-->底行模式 底行模式 ...
- Python Tkinter 图形组件介绍
1. 窗口 Tkinter.Tk() # -*- coding: UTF-8 -*- import Tkinter myWindow = Tkinter.Tk() myWindow.title('南风 ...
- SAP ME01创建货源清单
1业务说明 此文档使用函数:ME_DIRECT_INPUT_SOURCE_LIST创建货源清单 2前台实现 事务代码:ME01 输入抬头信息 保存即可 3代码实现 3.1调用函数 定义参数 字段 调用 ...
- Boosting算法总结(ada boosting、GBDT、XGBoost)
把之前学习xgb过程中查找的资料整理分享出来,方便有需要的朋友查看,求大家点赞支持,哈哈哈 作者:tangg, qq:577305810 一.Boosting算法 boosting算法有许多种具体算法 ...
- Java三大特征:封装 继承 多态
内部类:成员内部类.静态内部类.方法内部类.匿名内部类. 内部类:定义在另外一个类里面的类,与之对应,包含内部类的外部类被称为外部类. 内部类的作用:(1)内部类提供了更好的封装,可以把内部类隐藏在外 ...
- Spring Cloud 系列之 Config 配置中心(二)
本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Config 配置中心(一) 本篇文章讲解 Config 如何实现配置中心自动刷新. 配置中心自动刷新 点击链接观看: ...
- 小心了!Kubernetes自动化操作工具将让你失去工作
运行Kubernetes的人已经花费太多时间在操作上,企业正在考虑为Kubernetes编写自动化工具. 尽管IT部门的大部分职位都会增加,但职业顾问说,计算机操作员预计会减少.这个角色涉及运行She ...
- vue组件中的“:”、“@”、“.”属性
冒号属性 :是指令 v-bind 的缩写,是为了动态绑定数据,用于响应式地更新 HTML 特性. 加了冒号,后面是变量或表达式:不加冒号的是字符串. 如图:将Home组件中的 probe-type 的 ...
- HttpServletRequest与HttpServletResponse
一. 简介:每当客户端给Web服务器发送一个http请求,web服务器就会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和respons ...
- PAT 1002 A+B for Polynomials (25分)
题目 This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: E ...