一:隐形类型转换;
当我们在进行表达式计算中,务必要留意小于int类型的整数,像short,char等类型得数,而此时务必要先进行整型提升;
1: 已知c1,c2是char类型的,所以要先整形截断;
2:在c3表达式中,char类型在进行计算时,要发生隐形类型转换,即整型提升;
3:整型提升时看它是否有符号位,有符号位的就拿它最高位补符号位,无符号位的直接补零;
4:计算中存储在c3中的是补码;
5:打印过程中 % d 或者是%u ,打印他们时打印的是原码;所以要先对c3进行整型提升,然后减一的反码,最后符号位不变其他位按位取反得原码,打印的值即为二进制所表达得值‘
二:算术转换:
1:1:当表达式中 int 与 float相加减,会把int类型的转变位float类型的,算术转换中类型时向上转换的。
2:假如表达式中有小于int类型的数和有大于int类型的数,那么小于int类型的数会先进行整数提升,在于比他们类型较大的数中发生算术转换;
3:补码得原码,先进行减一,再取反。
1:有符号类型得char存储范围位 -128-127,无符号类型的char范围为 0~255;
由于i的类型为无符号整型,所以当i减少到负数,假设为-1时,它的符号位当作有效位,
所以它就被计算机认为及其大的数,他会不断循环输出下去;
这道题主要考了有符号char的存储范围,因为char类型的范围为-127到128,所以char类型的数组最多只能存储255个数;当char类型从-1到-128,再从-128到127,127在到0时,又因为'\0'的assica值为0,所以当strlen函数指针读到'\0'时,退出,故只能读取255个数字;
三:一:浮点数在内存中的存储;
1:存储时,在计算机内部保存中,默认M的取值范围为 1 <= M < 2,存储时可只存储M的小数部分,等到读取时再把这个数读取过去;
2:对于E来说,E是一个无符号类型的数,但在科学计数法中,E的值可能为负数,所以我们再存储E时可以加上以一个中间值,对于8位的E,中间值位127,对于11位的E,中间值为1023.
二:浮点数在内存中的取出;
E从内存中取出:
1:当E不全为0或者不全为1
对于32位的浮点数来说,将存储在E中的二进制数转变为对应数字,然后再减去127.M再加上有效数字M前加上第一位的1;
2:当E全为0时
此时的浮点数的指数E就等于1-127;有效数字M也不再加上第一位的1,而是还原为0.xxxxxx的小数,这样表示接近于很小的数字;