2.2.3. C语言中的整数类型及类型转换

2.2.3. C语言中的整数类型及类型转换

 2.2.3. C语言中的整数类型及类型转换

2.2.3. C语言中的整数类型及类型转换

东云名乃。nanonano。棒棒哒(๑•̀ㅂ•́)و✧买!大家双十一加油 加油加油

 下节我们要探讨一个相对来说简单的问题,就是C语言里边的那些定点整数是如何进行强制类型转换的,好来看这样的一个例子,首先需要跟大家声明的是C语言当中的定点整数,大家熟悉的什么it啊,还有什么short还有long,这些定点整数都是用补码的形式来存储的。另外C语言里还有一个关键词叫unsigned,如果有assigned来修饰short或者int或者long,那就意味着这个定点整数它是一个无符号数好来看一下,现在有一个short型的短整数 X,它的值是负的4321那么由于是采用补码表示的,并且短整形是占两个字节,也就是16个比特,所以16个比特的补码表示-4321应该是这样的一个只觉得换下如何转换成我们之前已经强调过的同学可以自己动手试一下我们这个型的树把他强制转换成。应该是这样的一个值,觉得大家可以自己转换一下源码,补码如何转换,这个我们之前已经强调过,不熟悉的同学可以再自己动手试一下,好,现在我们把S这个啊短整型的数把它强制转换成outside short,也就是无符号的短整形Y,那这种强制转换的规则是会把X的这个补码形式的数据完整不变的复制给Y这个变量,那由于Y也是占两个字节,所以Y的机器代码其实和X是一模一样的,只不过由于Y是一个无符号的端正型,因此计算机在解析Y的真值的时候,会按照无符号整数来进行解析,所以这个二进制无符号数啊,转换成真值,应该是对应这样的一个值,刚才大家可以暂停来转换一下,看看是不是这样好,那这是一个有符号的定点整数,转换成长度相同的无符号,定点整数的一个规则,不改变数据的二进制内容,但是会改变它的解释方式。无符号定点整数的一个规则,不改变数据的二进制内容,但是会改变它的解释方式,好再看第2个例子,如果我们把一个更长的数据把它变成一个更短的数据,而这样我们定义了两个N型的变量a和B那大多数情况下,C语言里边into型的数据占4个字节,那现在a和B是两个有符号的数都用补码的形式来保存,当我们把a和B这两个数强制转换成short,也就是由4个字节变成两个字节的时候计算机的做法是会直接把高位截断,然后只保留低位,那a对应的16进制,应该是这样的,把这4个字节的内容截断,只保留最低两个字节的内容,也就是86a1那更低的两个字节就是C这个变量的值,那由于C是一个有符号的短整型,所以计算机会用补码的规则来对它进行解析,与之对应的真值就应该是这样的一个值这是一个十六十六岁的话be何地也是一样的be这个数。对你的真挚就应该是这样的一个侄,这是一个16比特16位的布幔,对be和be也是一样的,B这个数啊,他用补码表示应该是这样的,把B转换成只有两个字节的de Asha测类型,那么就是只保留更低的两个字节,7751那仿由于D他是一个有符号的端折型,所以计算机会用16比特普马的这种方式来对它进行解析,与之对应的真实是这样的一个值好,那这是更长的数据转换成更短的数据的一个处理方式,很残暴,就是直接截断只保留更低的资金好,最后再来看更短的数据,转换成更长的数据,那这个问题其实我们之前聊过也就是所谓符号扩展的问题,好X原本是一个两个字节的,不骂啊总共占16位,那么把short形的X转换成四字节的int型计算机做的事情就是符号扩展,那之前我们说过,对于一个定点整数的补码来说,如果它是一个复数,那么我们需要在高位,呃,也就是这个符号位和原有的数值位之间天子。的复数,那么我们需要在高位,呃,也就是这个符号位和原有的数值位之间添一用这样的方式扩展得到的补满,你把它解析为增值的话,这个增值是不会变的,只不过是补码的整体长度拓展了而已,好再来看N这个变量啊,我们把X强制的转换为无符号类型,然后把它赋值给无符号的短整型N,那之前我们说过这种强制转换会把二进制代码原封不动的复制给N,只不过计算机会有无符号数的规则来解析这一串机器数,那这是N所对应的一个真值好,最后把无符号数N变成4个字节的无符号数P,那由于是无负号数到无负号数的转变,因此直接在高位填0就可以T和N的增值,这个增值是保持不变的,那么这就是C01年定点整数相关的一些强制类型转换参考的是两种数据长度相同的情况下而无符号数职。大部分探讨的是,在转换的两种数据长度相同的情况下,要有符号数和有符号数之间的一种转换规则。第2个部分探讨的是从长数据常转成短数据的一个处理方式,而第3个部分探讨的是从短数据转为常数据的一个转变方式。

2.2.3. C语言中的整数类型及类型转换