C语言的数值溢出问题(上)

问题: 何时会发生自动类型转换?

    在一个赋值语句中,当赋值运算符左侧变量的类型和右侧的表达式不一致时,  就会发生自动类型转换. 

问题:自动类型转换的规则是什么?

    将赋值运算符右侧表达式的类型自动转换为左侧表达式变量的类型.

问题: 在不同类型数据间赋值, 是安全的吗?

    

问题:何为数值溢出,为什么会发生数值溢出?

    任何数据类型都只能用有限的位数来存储数据, 也就是说任何数据类型的数据表达范围都是有限的. 如果我们向变量赋以超出其表示范围的数据, 就会发生数值溢出现象(这可能导致灾难性的后果).

生活中数值溢出的例子:

    

整数的数值溢出:

扫描二维码关注公众号,回复: 12936304 查看本文章

[注]右侧数据为程序运行后所得结果.

有符号整数和无符号整数的区别:

    有符号整数的最高位被解释为符号位(0 -> 正, 1-> 负), 而无符号整数的最高位被解释为数据位.

整数的上溢出现象:

[注]图中所示变量a的类型为无符号短整型.

[注]图中所示变量a在第二行中被解释为无符号整数, 在第三行中被解释为有符号整数.

[注]黄色区域第三行所示二进制数据为-32768的补码, 这是人为规定的.

[注]负数在内存中以补码形式存放.

整型数据到短整型数据过程中的数值丢失:

[注]int型变量在内存中占4个字节, 而short型变量在内存中占2个字节.

[注]short型变量只保留了int型变量的低两字节数据.

两个无符号短整型数据做减法运算:

猜你喜欢

转载自blog.csdn.net/weixin_42048463/article/details/115043658