C语言程序设计摘抄笔记3

2021/3/5 17:31
优先级排序为:算术运算bai符 > 关系运算符 > 赋值运算。

算术运算符中,乘法运算符【*】、除法运算符【/】、取余运算符【%】属于优先级第三级,加法运算符【+】、减法运算符【-】属于第四级。

关系运算符有6种关系,分别为小于、小于等于、大于、等于、大于等于、不等于。其中,关系运算符【< > <= >= 】属于优先级第六级,等于运算符【==】、不等于运算符【!=】属于优先级第七级。

赋值运算符【= += -= *= /= %= >>= <<.= &= |= ^=】属于优先级第第十四级。

所以,优先级排序为:算术运算符高于关系运算符高于赋值运算。

优先级相关规定:

1、优先级与求值顺序无关。如a+b && bc,虽然优先级最高,但这个表达式求值顺序是从左到右。优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。

2、相同优先级中,按结合性进行结合。大多数运算符结合性是从左到右,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。

3、指针最优,单目运算优于双目运算。如正负号。先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 & 7等价于 (1 << (3 + 2))&7 逻辑运算最后结合。

单目运算符高于双目运算符

简单的理解就是i++是先访问i然后再自增,而++i则是先自增然后再访问i的值。

用下面zhuan的代码作为shu一个例子

#include <studio.h>

int main() {

int i,x;

i = 1;

x = 1;

x = i ++; //先让x变成i的值1,再让i加1

print("%d", x); //输出的x为1

print("%d", i); //输出的i为2

i = 1;

x = 1;

x = ++i; //先让i加1, 再让x变成i的值2

print("%d", x); //输出的x为2

print("%d", i); //输出的i为2

}

i++和++i的区别
文章标签: 编译器 java 优化 delete string class
版权
如果有表达式 a = i++ 它等价于 a = i ; i = i + 1;
如果有表达式 a = ++i 它等价于 i = i + 1; a = i;

   1 首先两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值

   2 ++i和i++都是分两步完成的。因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值(可被寻址的值);i++ 的后面一步是自增,不是左值。(2的两步分解与左右值的因果关系只是我的直觉,对错还待考证)

   3  ++i 和i++ 的使用,一般来说在循环域里面,这两者并没有什么很大的区别,因为编译器一般都会给你做优化。但是要注意其生存周期,以及很难察觉的写脏,就好像指针delete以后一定要赋予0一样,我们要注意i值在程序流中的变化。

   4  i=1 ; j=(++i)+(++i)+(++i); printf("J=%d/n",j); 这个结果是什么?没有结果,因为不同的编译器做出来的结果,我用vc6和gcc出来的结果是一样的,但是我坚信这么多不同编译器的优化规则都会导致这个怪异的结果。回过头来,这样coding,你会疯掉的,左手logic,右手biology千万别走火入魔!

————————————————
版权声明:本文为CSDN博主「David8631」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/David8631/article/details/2707914

建议阅读计算机系统结构
int型的数到底最大值是多少?

friendbaby 2011-09-26 16:15:30 167912 收藏 3
分类专栏: C++ 文章标签: 百度 存储
刚才在百度知道上看见一个网友问int型的数最大能存多少。这个问题其实计算机系统结构里有讲解,

首先,我们要知道在计算机里怎么存储数字的。在计算机里,对数字编码有3种方式:原码、补码、反码。原码其实就是10进制数直接转2进制数的结果。比如:十进制的18,在二进制里是10010。那这里的10010就是原码。我们可以sizeof一下我们自己的电脑上int型占几个字节。我的是4个字节,也就是说只有32个位。如果一个十进制数转位二进制数位数大于32,就溢出,其实也就是存不下了。

我们存数不仅仅有正数还有负数,在计算机里如何区分正数负数?我们规定最高位是符号位。为0是正,为1负。所以最高位是不可以参加计算的。比如二进制数1000最高位是符号位的话,转十进制不是8,而是-0,对就是负0(正0的二进制形式是0000)。如果给一个十进制形式的负数,如何计算它的补码?

1.计算这个数绝对值的二进制表示。
2.把2^n写成二进制形式减去这个数,得到的就是补码。
比如:-5,
1。5的二进制形式是:0101.最高位是符合位,为0是正。
2. 1111-101,二进制的减法,补码就是1010.最高位是符合位,为1是负。

反码不常用,我没有细心学。

所以,int占32位的时候,最大可以赋值为:2147483647。也就是0x7fffffff。注意:7的二进制形式最高位为0,如果你对2147483647+1.输出的就是-2147483648。这个数是负数中最大的数,也就是int型可以表示的最小的负数。它的十六进制表示为:0x8fffffff,8的二进制形式最高位是符号位,是1,为负。
int型的数到底最大值是多少?

friendbaby 2011-09-26 16:15:30 167912 收藏 3
分类专栏: C++ 文章标签: 百度 存储
刚才在百度知道上看见一个网友问int型的数最大能存多少。这个问题其实计算机系统结构里有讲解,

首先,我们要知道在计算机里怎么存储数字的。在计算机里,对数字编码有3种方式:原码、补码、反码。原码其实就是10进制数直接转2进制数的结果。比如:十进制的18,在二进制里是10010。那这里的10010就是原码。我们可以sizeof一下我们自己的电脑上int型占几个字节。我的是4个字节,也就是说只有32个位。如果一个十进制数转位二进制数位数大于32,就溢出,其实也就是存不下了。

我们存数不仅仅有正数还有负数,在计算机里如何区分正数负数?我们规定最高位是符号位。为0是正,为1负。所以最高位是不可以参加计算的。比如二进制数1000最高位是符号位的话,转十进制不是8,而是-0,对就是负0(正0的二进制形式是0000)。如果给一个十进制形式的负数,如何计算它的补码?

1.计算这个数绝对值的二进制表示。
2.把2^n写成二进制形式减去这个数,得到的就是补码。
比如:-5,
1。5的二进制形式是:0101.最高位是符合位,为0是正。
2. 1111-101,二进制的减法,补码就是1010.最高位是符合位,为1是负。

反码不常用,我没有细心学。

所以,int占32位的时候,最大可以赋值为:2147483647。也就是0x7fffffff。注意:7的二进制形式最高位为0,如果你对2147483647+1.输出的就是-2147483648。这个数是负数中最大的数,也就是int型可以表示的最小的负数。它的十六进制表示为:0x8fffffff,8的二进制形式最高位是符号位,是1,为负。

前面还可以,后面就太绕 ,从根本来说,int用二进制来说,可以存32个字节,又因为最高位用来记录正负,所以能用的只有31字节,再加上 0 这个特殊的数字,所以最大的 int 是 2的31次方减 1 ,负数同理,按理说应该最小的负数是 -(2的31次方减 1) ,但由于会造成一位置无意义,所以负数加一位,所有负数多减少1 ,所以可以存到 -(2的31次方)
-231——231-1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值