CPP类型转换难点知识分析
含有无符号类型的表达式:
【1】在C++程序编写过程中,若既有无符号数又有int值,int值会被自动类型转换为无符号类型
例:
在第二个u+i的表达式中我们注意到答案变成了一个极大的整数
注意:
1.在进行无符号数与int类型的加减时,需要把int类型的数转换为无符号类型(这里的int值只是示例,其他的类型与他对应的无符号类型运算时也要进行转换)
2.转换类型方法
取模!(视编译器情况而定)图中所示,int类型为32位,能够储存的最大数为2的32次方,用int值取最大数的模,即转换为无符号类型。
【2】 从无符号数中减去一个数
示例:
注意
1.两个无符号数相减时,将他看作与前方的减号是一体的!再按照【1】中进行运算。
总结:1.在进行转换时,有符号数与无符号数必须具有相同的字(4个字节)长,转换后,位数不变。
2.对于这一部分的理解不清在于对于数据在机器中的存储形式的不清楚,必须明确一点,对于机器来说,int的1与无符号数的1没有区别!
3.在有符号数转换为无符号数的过程中,储存在机器内的数字并没有改变,对于定义为有符号类型的数,机器需要将第一个数视为符号;而对于定义为无符号类型的数,机器将其整体视为一个数
在遇到关于数据的相关问题时,如果难以想通,可以从机器层面进行思考,利于理解。