#include<stdio.h>
main()
{ double m=65536;double n=65535;
printef("\n%d,%d",(int)m,(int)n)
}
为什么运行的结果为0和-1
#include<stdio.h>
main()
{ double m=65536;double n=65535;
printef("\n%d,%d",(int)m,(int)n)
}
为什么运行的结果为0和-1
C语言做长整型到整型的数据类型转换是直接从低位截取,而将高位舍去。
65536用长整型表示为
十五个0+1+十六个零(二进制)
转换为整型时,取后面十六位二进制数字,结果全是0,所以输出为0.
65535用长整型表示为
十六个0+十六个1(二进制)
转换为整型时,取后面十六位二进制数字,结果全是1,输出为-1(计算机中负数是用补码表示的)