这个知识点楼主还要好好的看一下《深入理解计算机系统》一书!!-1属于有符号数,在计算机中有符号数用的是二进制补码形式(32位)来表示,
即 1111 1111 1111 1111 1111 1111 1111 1111 而unsigned char 是一个字节,即8位二进制表示(注意对于无符号数来说没有什么补码概念,补码针对的只是有符号数而言)
32位要阶段为8位,所以1111 1111 1111 1111 1111 1111 1111 1111变为了1111 1111
而1111 1111该二进制表示的数就是255
所以unsigned char a=-1;
printf("%d",a);
输出的就是255
unsigned int a=-1;
printf("%d",a);
在这段代码中-1不需要进行截断了
因此输出的就是-1
不要被数据的表面现象所迷惑,要看看数据在计算机中二进制表示的是什么样的!!!
本人也是菜鸟呀!!
[
本帖最后由 我菜119 于 2010-9-25 11:00 编辑 ]