注册 登录
编程论坛 C++教室

菜鸟问个问题呀 !

yanzhuomin 发布于 2010-05-26 20:28, 722 次点击
#include<stdio.h>
void main()
{
    char c=0xffff;
    printf("%d",c);
}
为什么输出的是-1
讲一下原理 谢谢了 !
9 回复
#2
daisylin2010-05-26 22:47
-1的补码,16位
#3
2010-05-26 22:59
char 为一个字节。char c=0xffff;自动截取后面的一个字节复制给c。也就是说c=ff。在计算机中负数的最高位是1,是负数,用补码表示,所以输出-1。
#4
kekin2010-05-26 23:29
楼上正解
#5
fanfan3202010-05-27 11:33
输出的是补码形式,ff 的补码是—1
#6
shenshaoli2010-05-27 21:49
回复 5楼 fanfan320
额 我是菜鸟 ff的补码为什么是1 求解释下。。。
#7
shenshaoli2010-05-27 21:50
回复 6楼 shenshaoli
为什么是-1.。。上面打错了
#8
最近不在2010-05-28 00:14
16进制ff  用2进制表示则为1111  1111,其中最高位为符号位,1代表负数,0代表正数,剩下的7位数数据位!
#9
ciweitou1632010-05-28 08:47
正数的补码 与原码相同
负数的补码 原码的数据位 按位取反+1 (数据最高为若有进位 舍去)
#10
gaoce2272010-05-28 10:14
1111 1111的最高位是符号位,1表示为负数,余下7位按位取反,得000 0000,再加1.得000 0001.所以1111 1111的补码为1000 0001即为-1.
1