企业形象网站解决方案,荥阳网站建设荥阳,重庆市工程建设信息网中项网,wordpress 图片地址 数据库本篇文章#xff0c;我们将展开讲解C语言中的各种常用操作符#xff0c;帮助大家更容易的解决一些运算类问题。
这里提醒一下小伙伴们#xff0c;本章知识会大量涉及到二进制序列#xff0c;不清楚二进制序列的小伙伴#xff0c;可以去阅读我的另一篇文章《数据在内存中的…本篇文章我们将展开讲解C语言中的各种常用操作符帮助大家更容易的解决一些运算类问题。
这里提醒一下小伙伴们本章知识会大量涉及到二进制序列不清楚二进制序列的小伙伴可以去阅读我的另一篇文章《数据在内存中的存储》学习了解。 目录
一.操作符分类
二.操作符讲解
1.算数操作符
2.移位操作符
1左移操作符
2右移操作符
3.位操作符
1 按位与 2| 按位或 3^ 按位异或
4.赋值操作符
5.单目操作符
总结 一.操作符分类
算术操作符移位操作符位操作符赋值操作符单目操作符关系操作符逻辑操作符条件操作符逗号表达式下标引用函数调用和结构成员
二.操作符讲解
由于操作符数量过多所以本期文章我们将仅仅讲解前五种。
1.算数操作符
算数操作符包括 “-*/%” 五个。较为简单小伙伴们只需要注意以下几点
除了“%”操作符之外其他的几个操作符可以作用于整数和浮点数。对于“/”操作符如果两个操作数都为整数执行整数除法。只要有浮点数就执行浮点数除法。“%”操作符的两个操作数必须为整数返回的是整除后的余数。
2.移位操作符 左移操作符 右移操作符 移位操作符的左边是要操作的数右边则是要移动的位数。
要注意的是移位操作符的操作数只能是整数移动的对象则是整数的二进制序列。
一个整型占四个字节也就是32个bit位要记住整型在数据中存储的是二进制序列的补码所以我们对整型的操作都是对其补码进行操作的。
1左移操作符
左移操作符顾名思义就是将整数的二进制序列向左边移动呗那么它的规则是什么呢
移位规则
左边丢弃右边补0
#includestdio.h
int main()
{int n 6;//00000000 00000000 00000000 00000110-移动前//00000000 00000000 00000000 00001100-移动后int m n 1;printf(%d\n, n);printf(%d\n, m);return 0;
}
如上代码将“6”的二进制序列向左移动一位便得到了一个新的二进制序列。结果如下 由结果可以看出移位操作符并不会改变操作数本身而且细心的小伙伴们可以看出向左移动一位不就相当于每一位的数字都“乘2”嘛也就是将数字翻倍移动n位便翻2的n次方倍。
负数的操作与之一样就是小伙伴们千万不要忘记原码和补码之间的转换。
2右移操作符
移位规则
右移运算分为两种 1.逻辑移位 左边用0填充右边丢弃 2.算术移位 左边用原值的符号位填充右边丢弃 不同的编译器会有不同的右移运算但是我们平时所使用的绝大多数编译器都是算数右移。
#includestdio.h
int main()
{int n -15;//10000000 00000000 00000000 00001111-原码//11111111 11111111 11111111 11110000-反码//11111111 11111111 11111111 11110001-补码//11111111 11111111 11111111 11111000-移动后补码//11111111 11111111 11111111 11110111-移动后反码//10000000 00000000 00000000 00001000-移动后原码int m n 1;printf(%d\n, n);printf(%d\n, m);return 0;
}
结果如下 同左移类似右移则是将数字折半但是如果是奇数的话结果则会是比小数小的最临近于小数的负数。比如-15的右移结果就是-8。
3.位操作符 按位与 | 按位或 ^ 按位异或 位操作符的操作数也必须是整数也是对其二进制序列动手。
1 按位与
假如我是一个企业高管我现在需要程序员A与程序员B一起来完成某个项目这说明A和B是必不可少的他们两个少了谁这个项目都完不成。这便是按位与。
口诀同真则真有假则假
#includestdio.h
int main()
{int a 6;//00000000 00000000 00000000 00000110-补码int n -15;//11111111 11111111 11111111 11110001-补码int m a n;//00000000 00000000 00000000 00000110-补码//11111111 11111111 11111111 11110001-补码//00000000 00000000 00000000 00000000-m的补码重点printf(%d\n, m);return 0;
}
我们习惯上将二进制序列的“1”视为真“0”视为假an便是两个二进制序列对应的每一位相与从而得到一个新的二进制序列。
由上可知m的二进制序列全为0也就代表m的值为0结果如下 2| 按位或
假如我又是一个企业高管我现在需要程序员A或程序员B来完成某个项目这说明A和B他们两个只要有一个能来做这个项目就能成如果一个都没有就做不了。这便是按位或。
口诀同假则假有真则真
#includestdio.h
int main()
{int a 6;//00000000 00000000 00000000 00000110-补码int n -15;//11111111 11111111 11111111 11110001-补码int m a | n;//00000000 00000000 00000000 00000110-补码//11111111 11111111 11111111 11110001-补码//11111111 11111111 11111111 11110111-m的补码要点//11111111 11111111 11111111 11110110-m的反码//10000000 00000000 00000000 00001001-m的原码printf(%d\n, m);return 0;
}
对两个二进制序列的每一位相或便得到m的补码但是m的符号位为1是负数所以要转化为原码来读。
结果如下 3^ 按位异或
假如我还是一个企业高管……这个不好举例子了哈哈哈直接来看口诀
相同为0不同为1
#includestdio.h
int main()
{int a 6;//00000000 00000000 00000000 00000110-补码int n -15;//11111111 11111111 11111111 11110001-补码int m a ^ n;//00000000 00000000 00000000 00000110-补码//11111111 11111111 11111111 11110001-补码//11111111 11111111 11111111 11110111-m的补码重点//11111111 11111111 11111111 11110110-m的反码//10000000 00000000 00000000 00001001-m的原码printf(%d\n, m);return 0;
}
将两个二进制序列的每一位相异或结果如下 4.赋值操作符
所谓赋值操作符也就是我们经常使用的“ ”将一个常量或者常量表达式赋给一个变量。 int a 1;//不是赋值是创建之后的初始化 a 5;//是赋值 int b 2; int c 0; c a b;//也是赋值 除了等号以外还有一些常用的复合赋值操作符 - * / % | ^ 这些符合赋值其实是两个运算式的合并例如 int a 2; a a 5 和 a 5 是一样的效果后者看起来会更加的简洁 5.单目操作符
所谓单目也就是这种操作符的操作数只有一个。 逻辑反操作- 负值 正值 取地址sizeof 操作数的类型长度以字节为单位~ 对一个数的二进制按位取反-- 前置后置-- 前置后置* 间接访问操作符解引用操作符(类型) 强制类型转换 这些操作符我们大多数都知道下面我们仅仅讲解一下不是那么熟悉的 sizeof 操作数的类型长度 sizeof 计算的结果是 size_t 类型 size_t 是无符号整型 对 size_t 类型的数据进行打印可以使用%zd或%u int a 10; printf(%zd,sizeof(a)); 结果为4。 ~ 对一个数的二进制按位取反 int a 0; printf(%d,~a); 0的补码二进制序列为 00000000 00000000 00000000 00000000 111111111 111111111 111111111 111111111//为负数取原码 111111111 111111111 111111111 111111110//反码 10000000 00000000 00000000 00000001//原码 结果为-1。 * 间接访问操作符 int a 10; int* p a; *p;//这时候我们的*就是对p进行解引用操作*p是通过p中存放的地址找到p指向的对象。 *p 其实就是a。 (类型) 强制类型转换 int a (int )3.14; 3.14在编译器中会被默认为是double类型如果直接将其初始化给int型的a则会在后续操作中出现误差甚至错误所以要将其强制类型转化为int型。 总结
本期关于操作符的知识讲解到这里就要结束啦稍后博主将更新C语言基础之——操作符下来讲解剩余的操作符。
喜欢博主文章的小伙伴们不要忘记一键三连哦我们下期再见