C/C++程序基础

(一)i++ 和 ++i的用法

wKioL1ZiWu7AHnxDAAAjZTpauaM052.png

分析:++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,这样编译器会报错,因为无法判定到底是“- --”还是“-- -”,因此需加空格。

程序输出结果为:

wKiom1ZiWgvA-c3VAAAfEUemefA097.png


(二)类型转换

wKiom1ZifGDAhnHwAAAfXB8xoL8790.png

分析:应当注意的是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。

程序执行结果为:

wKiom1ZihMby8EvVAAATrSMQgOs605.png


(三)两个变量值交换的方法

wKiom1Zij7nB0lhMAAAYRI2xOOE096.png

wKioL1ZikCXSIfqIAAAHrLodBHw854.png

wKiom1Zij7qSrFxYAAAev7S8dUc994.png

分析:上例中有三个数值交换的函数,其中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()会是一个比较好的选择。

上述程序执行结果为:


wKioL1ZikDmQm-_bAAAYCWPBvHU526.png

你可能感兴趣的:(类型转换,++,--,数值交换)