|
发表于 2009-4-30 21:18:50
|
显示全部楼层
首先谢谢looker指出我对unisigned和signed char的看法,他确实是标准C语言的一部分,见上面我所贴出的C标准的43-44页。
这个地方还不是很明白,为什么unsigned类型与signed类型之间相互赋值提示的是“符号不一致”呢?他们是不兼容类型的呀
答:就像我上面说的,两种类型定义都是定义了一个8bits的整形数,但是一个是从0~255,而另外一个是从-128~127也就是说从0x00~0xFF中有一部分数的表达在这两种类型定义中是不同的,见下表。所以上面系统会给出一个警告。
具体说吧,如果你的程序中数值的应用范围在0-127之间,那么这个警告其实对你的程序不会有什么不良影响,但是如果你定义了char类型,如而且使用范围在0-255之间,那么强制转换是会把128-255之间的数转换成负数,反之亦然。
看了你贴出的警告,好像不是关于char类型的,而是关于指针的,好像是你把错误的指针类型赋值给其他类型的指针。
实际时我都是typedef出u8,u16,u32,s8,s16,s32
按需选取合适类型...
这个选项小心使用...8位的int很可能有你不想看到的情况
比如循环变量变成8位的int,下面这个就会有问题
int i;
for(i=0;i<200;i++)
{
}
你会发现128次就跳出循环了
因为普通的整数是被定义为signed的整形,所以到范围是-128~127,所以当你从0-127之后i就变成了负数,i就小于200了程序就跳出了。
还有对你提到的需要了解哪些头文件,我认为是需要用什么查什么,因为大多数complier的设计公司都会遵守标准设计的。你只要有一本对应语言的参考书,上面对各种类型定义的解释,估计不会和你使用的有大的出入。
see=say是我对我18贴的补充说明,因为打字打错了
Unsigned 8-bit integers (No sign-bit)
Binary Hex Decimal
0000 0000 0x00 0
0000 0001 0x01 1
0000 0010 0x02 2
. . . . . . . . .
1111 1101 0xFD 253
1111 1110 0xFE 254
1111 1111 0xFF 255
Signed 8-bit integers (Sign + Magnitude)
S Magnitude
1 000 0000 0x80 -128
1 000 0001 0x81 -127
1 000 0010 0x82 -126
. . .
1 111 1101 0xFD -3
1 111 1110 0xFE -2
1 111 1111 0xFF -1
0 000 0000 0x00 0
0 000 0001 0x01 1
0 000 0010 0x02 2
. . .
0 111 1101 0x7D 125
0 111 1110 0x7E 126
0 111 1111 0x7F 127 |
|