C语言中数值溢出的问题

2024-11-20 07:19:41
推荐回答(3个)
回答1:

如果说短整型的长度是2个字节,
short int 的范围就是-32768~32767
32768比最大值多1,也就是变成最小值了。
你的计算也不对。
应该是这样计算的:32768是:1000 0000 0000 0000
要把这个补码求原码,即是补码-1再取反,然后加上负号。
1000 0000 0000 0000 -1=0111 1111 1111 1111
取反即是:1000 0000 0000 0000 (正数32768)
加上负号:-32768
所以结果是-32768

回答2:

c语言中对于负数的表示方法是它所对应的正数取反加1
那么-1对应的正数为0000 0000 0000 0001取反 1111 1111 1111 1110加1 即1111 1111 1111 1111
那么-32768 对应的正数为 1000 0000 0000 0000 取反 0111 1111 1111 1111 加1 即1000 0000 0000 000

回答3:

计算机没有你想的那么复杂。计算机会认为你当前数据类型的最大值+1会变成最小值。-1和-32768,那个最小啊?