关于赋值运算符的类型转换问题
发布网友
发布时间:2023-12-06 11:24
我来回答
共2个回答
热心网友
时间:2024-09-28 07:58
因为b=98304,而short型变量的范围是-32768~32767,当把b赋给a时,明显会溢出。
这个与二进制有关系。内存中数据的存储是以二进制的形式的。
unsigned
long
类型二进制第一位不表示符号,默认为正;而short类型第一位表示符号的(1表示为负)。
溢出时a的二进制各位全为一,因此为负的最大值。
热心网友
时间:2024-09-28 07:53
short是有符号整形,第一位是符号位,且只有两个字节,它的值范围一般是
-32768
-
32767或者
-32767-32767,
视不同的编译环境而定,
在你的编译环境中
short
范围显然是
-32768
-
32767,
C中超出范围的赋值一般会发生截断
98304
转换成二进制是:
98304:
0001
1000
0000
0000
0000
short
1000
0000
0000
0000
//截断,取后面16位
得
a
=
1000
0000
0000
0000(二进制),
在该编译环境中就是
-32768,