C/C++程序基础
(一)i++ 和 ++i的用法
分析:++i --i i++ i--不作说明,执行至第14行时,i=8。
从第15行开始,-i++ -i-- -++i - --i,首先,取负符号'-' 和 ++ --的逻辑优先级等级是相同的,那么在进行运算时,遵从“从右至左”的顺序,那么就比较好理解了。
i=8时,
执行-i++,则输出-8,完毕后i=9
执行-i--,则输出-9,完毕后i=8
执行-++i,则输出-9,完毕后i=9
执行- --i,则输出-8,完毕后i=8,值得注意的是在编写程序的时候,不能写成---i,这样编译器会报错,因为无法判定到底是“- --”还是“-- -”,因此需加空格。
程序输出结果为:
(二)类型转换
分析:应当注意的是getChar()函数中,局部变量a是无符号整型,而形参x,y都是有符号整型,函数体内,有a=x; 因此要先将x转换为无符号×××数,然后与y相加,比较其与10的大小。
第15行,7+4=11,大于10,则c1=1;
第16行,7+3=10,则c2=2;
第17行,7+(-7),这里需要注意,-7首先要转换为无符号整型,int类型变量占4个字节,
原码表示为:1000 0000 0000 0000 0000 0000 0000 0111,
反码表示为:1111 1111 1111 1111 1111 1111 1111 1000
补码是反码+1,
补码表示为:1111 1111 1111 1111 1111 1111 1111 1001
那么-7转换为无符号×××数,数值为4294967289,
然后再与7相加,7+4294967289=4294967296,无符号整型数范围是0~4294967295,那么正好溢出,因此,此时a+y=0,则c3=2;
第18行,7+(-8),-8转换为无符号整型数值为:4294967288,则7+4294967288=4294967295,未溢出,4294967295>10,则c4=1。
程序执行结果为:
(三)两个变量值交换的方法
分析:上例中有三个数值交换的函数,其中swap1()和swap2()为课本常规的方法,需要一个中间变量;swap2()和swap()则不需要中间变量,swap2()是通过简单地进行加减运算来达到交换的目的,swap3()则是通过异或的方式来交换a,b。
分析一下swap2(),我们会发现swap2()函数中有a=a+b;这一条语句,比较容易发生溢出,例如程序中a=2147483647,b=1,a+b=2147483648,而我们知道int类型的×××数,范围是-2147483648~2147483647,因此a+b溢出。但是,从程序执行结果来看,虽然发生了溢出,但是数值还是准确地交换过来了。
如果不希望使用中间变量的话,swap3()会是一个比较好的选择。
上述程序执行结果为:
转载于:https://blog.51cto.com/tangxiaoguo/1719801