C 语言的运算符
算术运算
C 语言支持 + - * / % 五种运算,加减乘除取模。
所有 CPU 都内建加法器,可以完成加法操作。减法操作可以转为加法操作。大部分 CPU 都没有内置乘法器,此时编译器会把 * / 乘除运算转为加法运算,用软件来模拟乘法。
逻辑运算
逻辑运算的返回结果是 1 或 0,C 语言中没有布尔类型,真假即用 1 和 0 代替。
|| 和 &&
逻辑与 &&:两侧表达式都为真时,表达式为真,否则为假。
逻辑或 ||:两侧表达式都为假时,表达式才为假,否则为真。
注意:C 语言在处理逻辑与 && 和逻辑或 || 时,如果逻辑与的左表达式为假或逻辑或的左表达式为真,则不会再执行右表达式。
#include <stdio.h>
int main()
{
int a = 6;
int res;
res = ((a == 6) || printf("right express run\n"));
printf("end of main,res is:%d\n", res);
}
输出为:
end of main,res is:1
>、>=、<、<=
跟数学中的比较运算一致。
! 逻辑取反
int a = 0x0;
if (!a) printf("hello"); // a 逻辑取反后变成1,这一行会打印
?:
三目运算符。a ? b : c 中,a 表达式为真时执行 b,否则执行 c。
位运算
<< 和 >>
按位左移 <<:相当于乘法,左移 n 位相当于乘以2的n次方。最低位一律补0。
按位右移 >>:相当于除法,右移 n 位相当于除以2的n次方。有符号数最高位补符号位(负数补1,正数补0),无符号数最高位补0。
例如对于 0x1(0000 0001),左移一位后,变为 0x2(0000 0010)。乘以 32 相当于左移 5 位。
#include <stdio.h>
int main()
{
char a = 0x1;
int i;
for (i = 0; i < 8; i++)
{
a = a<<1;
printf("0x%x\n", a);
}
a = 1;
for (i = 0; i < 8; i++)
{
a = a>>1;
printf("0x%x\n", a);
}
a = -1;
for (i = 0; i < 8; i++)
{
a = a>>1;
printf("0x%x\n", a);
}
unsigned char b = -1;
for (i = 0; i < 8; i++)
{
b = b>>1;
printf("0x%x\n", b);
}
}
&、|、^
- 按位与 &:任意位与 0 按位与,得到0。按位与可以用来屏蔽某位。例如
a & 0xf0可以屏蔽低 4 位。 - 按位或 |:任意位与 1 按位或,得到1。按位或可以用来开启某位。例如
a | 0xf0可以开启高 4 位。 - 按位异或 ^:两位不同则为 1,否则为 0。主要用作算法上,工程上用的少。例如不借助中间变量交换两个变量的值:
a = a ^ b;
b = a ^ b;
a = a ^ b;
& 也叫清零器,| 也叫设置器。例如,将变量的第3位设置为1或清除为0:
#include <stdio.h>
int main()
{
char a = 0x1; // 0000 0001
a = a | (1 << 3); // 0000 1001
printf("%x\n", a);
a = a & (~(1 << 3)); // 0000 0001,为了安全,这里不要直接计算
printf("%x\n", a);
}
~ 按位取反
0xf0 按位取反得到 0x0f。
赋值运算
除了 = 赋值运算外,还可以在 C 语言中使用符合赋值运算符 +=、-=、*=、/= 、%=、&=、|=。例如上面的例子可以变成:
a |= (1 << 3); //a = a | (1 << 3);
a &= (~(1 << 3)); //a = a & (~(1 << 3));
内存访问运算
小括号
小括号除了可以改变优先级外,还可以用于函数访问。
中括号
方括号可以用在数组声明定义和使用中,用于访问指定内存。
大括号
函数体、struct、union 体。
成员变量访问符 -> 和 .
->:地址访问。声明了指向 struct 类型的指针后,通过 -> 访问其中元素。
.:变量访问。声明了 struct 类型的变量后,通过 . 访问其中元素。
#include <stdio.h>
#include <string.h>
typedef struct People
{
char name[20];
int id;
} peo;
int main()
{
struct People p1;
peo* p2;
strcpy(p1.name, "hello");
p1.id = 666;
printf("%s, %d\n", p1.name, p1.id);
p2->id = 888;
printf(" %d\n", p2->id);
}
& 和 *
& 作为单目运算符,后面跟变量时,表示取地址运算符。作为双目运算符时,表示按位与。
* 作为单目运算符,后面跟变量时,表示指针运算符。作为双目运算符时,表示乘法。
C 语言的运算符的更多相关文章
- C语言位运算符:与、或、异或、取反,左移和右移
C语言位运算符:与.或.异或.取反.左移和右移 个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型. ,则该位的结果值为1,否则为0 | ...
- C语言预处理运算符
转自C语言预处理运算符 预处理还需要运算符?有没有搞错? ^_^, 没有搞错,预处理是有运算符,而且还不止一个: #(单井号) -- 字符串化运算符. ##(双井号 )-- 连接运算符 #@ ...
- C语言位运算符:与、或、异或、取反、左移和右移
语言位运算符:与.或.异或.取反.左移和右移 位运算是指按二进制进行的运算.在系统软件中,常常需要处理二进制位的问题.C语言提供了6个位操作运算符.这些运算符只能用于整型操作数,即只能用于带符号或无符 ...
- go语言的运算符
什么是运算符:运算符用于在程序运行时执行数学或逻辑运算 go语言的运算符如下: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 一,算数运算符 运算符 描述 实例 + 相加 A ...
- C语言的运算符的优先级与结合性+ASCII表
[0]README 0.1) 内容来源于 C程序设计语言, 旨在整理出C语言的运算符的优先级与结合性, 如下图所示(哥子 记了大半年都没有记住,也是醉了,每次都要去翻): Alert)以下内容转自:h ...
- 3014C语言_运算符
第四章 运算符 4.1 分类 C语言的运算符范围很广,可分为以下几类: 1.算术运算符:用于各类数值运算.包括加(+).减(-).乘(*).除(/).求余(%).自增(++).自减(--)共七种. 2 ...
- go语言基本运算符
go语言基本运算符 1.算术运算符 以下假设A=10,B=20: 2.关系运算符 以下假设A=10,B=20: 3.逻辑运算符 以下假设A=true,B=false: 4.位运算符 十进制转二进制: ...
- 【转】C语言位运算符:与、或、异或、取反、左移与右移详细介绍
转载自:http://www.jb51.net/article/40559.htm,感谢原作者. 以下是对C语言中的位运算符:与.或.异或.取反.左移与右移进行了详细的分析介绍,需要的朋友可以过来参考 ...
- 关于C语言中运算符优先级的一次错误
好久没碰编程了,最近有点闲,又拾起来.做了个简单的网络测试程序,测试的时候发现有条语句老是获取不到结果.如下: if(portnumber=atoi(argv[1])>65535) portnu ...
- c语言位运算符
C语言既具有高级语言的特点,又具有低级语言的功能. 所谓位运算是指进行二进制位的运算. C语言提供的位运算: 运算符 含义 & 按位与 | 按位或 ∧ 按位异或 ∽ ...
随机推荐
- Ubuntu换阿里云源
sudo -s cd /etc/apt gedit source.list deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted u ...
- Ubuntu18.04 安装netstat
关键命令 sudo apt-get install net-tools 参考博客:https://www.cnblogs.com/2sheep2simple/p/10611650.html
- Nginx优化_访问并发量(进程可以打开的最大文件数量)
如果客户端访问服务器提示“Too many open files”如何解决? [root@proxy ~]# ab -n 2000 -c 2000 http://192.168.1.100/ # ...
- 状压DP操作
1.’&’符号,x&y,会将两个十进制数在二进制下进行与运算,然后返回其十进制下的值.例如3(11)&2(10)=2(10). 2.’|’符号,x|y,会将两个十进制数在二进制 ...
- web框架-(六)Django补充---form表单验证
一.form表单验证 1. 常规html页面的form表单验证 常规页面中,如果想实现对表单中用户输入信息的数据验证,需要配合Ajax来实现. 使用前我们先来熟悉下函数参数:request,其中包含的 ...
- HMM 传统后向算法
HMM 传统后向算法,已实现,仅供参考. package jxutcm.edu.cn.hmm.model; import jxutcm.edu.cn.hmm.bean.HMMHelper; impor ...
- 清北学堂提高突破营游记day1
上午7点半到的国防宾馆,8点开始的培训. 讲课人林永迪. 没错就是这个人: 他推荐的教辅:刘汝佳紫书,算法导论(也就看看..),刘汝佳白书 先讲模拟.(貌似就是看题论题. 然后贪心. 贪心没有固定的模 ...
- Understand:高效代码静态分析神器详解(一) 转
之前用Windows系统,一直用source insight查看代码非常方便,但是年前换到mac下面,虽说很多东西都方便了,但是却没有了静态代码分析工具,很幸运,前段时间找到一款比source ins ...
- pt-online-schema-change在线修改脚本
pt-online-schema-change在线修改脚本 经过几次在测试环境中使用,发现5.6和5.7可以正常使用.mysql8.0.18版本中,竟然无法使用,感到惊讶.难道mysql8.0.18强 ...
- [LOJ 6704] 健身计划
问题描述 九条可怜是一个肥胖的女孩. 她最近长胖了,她想要通过健身达到减肥的目的,于是她决定每天做n次仰卧起坐以达到健身的目的. 她可以将这n次动作分为若干组完成,每一次完成ai次仰卧起坐,每做完一次 ...