一篇文章带你入门C语言:操作符
一篇文章带你入门C语言:操作符,博智网带你了解详细信息 。
目录
- 操作符
- 分类
- 算术操作符
- 移位操作符
- 整数存储规则
- 左右移位规则
- 赋值操作符
- 单目操作符
- 取地址操作符& 解引用操作符*
- 类型长度操作符sizeof
- 按位取反操作符~
- ++ -- 操作符
- 强制类型转换操作符(type)
- 关系操作符=
- 逻辑操作符
- 短路运算
- 条件操作符
- 逗号表达式
- 下标引用、函数调用和结构成员
- 下标引用操作符[]
- 函数调用操作符()
- 结构成员操作符. ->
- 结构体定义
- 结构体使用
- 结构体地址
- 表达式求值
- 隐式类型转换
- 整型提升
- 如何整型提升
- 有符号数
- 无符号数
- 算术转换
- 操作符的属性
- 总结
操作符
分类
算术操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符
逗号表达式
下标引用、函数调用和结构成员
算术操作符+ - * / %
//1.int ret = 9 / 2;printf("%d", ret);//4//2.double ret2 = 9 / 2;printf("%lf", ret2);//4.000000//3.double ret3 = 9 / 2.0;printf("%lf", ret3);//4.500000
从这两个对比可以看出 , 不是存储的问题 , 而是计算机里9/2就是等于4 , 怎么存都是4 。/ 的两个操作数都为整数时 , 执行整数除法 , 只要有浮点数就执行浮点数除法 。% 的两个操作数必须为整数 , 所得结果的范围在 [ 0 , 除 数 − 1 ] [0, 除数-1] [0,除数−1] 之间 。
要想得到正确结果 , 则要改成9.0/2或者9/2.0 。
接下来的移位操作符和位操作符都是较为复杂的 , 涉及到二进制位 。
移位操作符
<< //左移操作符
>> //右移操作符
整数存储规则
移位操作符移动的是二进制位 , 整数在内存中存储的是二进制补码 , 移位操作的也是内存中的补码 。整数在内存中的存储:
- 正数: 原
- 码反码补码相同
- 负数:
- 原码:二进制序列
- 反码:原码符号位不变 , 其他位按位取反
- 补码:反码 + 1
左右移位规则知道二进制位如何转化后 , 我们再来看移位操作符的移动规则 。
1.左移操作符
左边舍弃 , 右边补0【一篇文章带你入门C语言:操作符】






这样的表达式在不同的编译器下 , 会跑出不同的结果 , 因为各个编译器的标准不一样 。对于这样的表达式 , 我们知道操作符的优先级和结合性 , 但我们依然无法确定表达式计算的唯一路径 , 所以这样的代码是不好的 , 宁愿多写几步 , 规范确定出表达式的唯一执行路径 , 也不要追求过分的简洁 , 这不是代码的目的 。
总结我们写出的表达式如果不能通过操作符的属性确定唯一的计算路径 , 那这个表达式就是存在问题的 。
本篇文章就到这里了 , 希望能给你带来帮助 , 也希望能够您能够多多关注趣讯吧的更多内容!
推荐阅读
- ps金属光泽要怎么做
- 苹果13桌面小组件照片怎么设置
- etc余额不足让通行吗
- cdr中要怎么进行居中对齐
- word表格上下错开怎么对齐
- 美团会员在哪里买
- cdr导出pdf应该咋操作
- cdr导出应该如何操作
- cdr文件要怎样导出jpg
- 华为手机怎么调出小窗口
