代码如下:
//测试IDE与及该硬件条件下不同数据类型的 长度 和 范围 !
# include <stdio.h>
int main(void)
{
char a = -1 ;
printf("Type Char : %d bites Zone : %d --- %d\n",
sizeof(char) , ( (unsigned char)a >> 1) * -1 , (unsigned char)a >> 1 );
printf("Type Unsigned Char : %d bites Zone : 0 --- %d\n",
sizeof(unsigned char) , (unsigned char)a );
int b = -1 ;
printf("Type Int : %d bites Zone : %d --- %d\n",
sizeof(int) , ( (unsigned int)b >> 1 ) * -1 , (unsigned int)b >> 1 );
short int c = -1 ;
printf("Type Short Int : %d bites Zone : %d --- %d\n",
sizeof(short int) , ( (unsigned short)c >> 1 ) * -1 ,(unsigned short)c >> 1 );
long int d = -1 ;
printf("Type Long Int : %d bites Zone : %d --- %d\n",
sizeof(long int) , ( (unsigned long)d >> 1 ) * -1 , (unsigned long)d >>1);
printf("Type Unsigned Int : %d bites Zone : 0 --- %d\n",
sizeof(unsigned int) , (unsigned int)b );
return 0;
}
前面运行正常,为什么最后一个(unsigned int)b 运行的结果总是 -1 ? 按理说使用强制类型转换成无符号整型后,应该是4294967294才对啊
这个问题弄明白了。请看第二个printf函数,里面的(unsigned char)a 对应的输出控制符还是%d , 但输出却是正常的255呢?
追答在32全的编译器中的char为8位,而int为32位的。所以将尾unsigned char转为int时,直接将int的位8位置为与unsigned char相等。但是值得注意的是char转换为int却不是这样,因为char和int直接按值转换,且保留符号位。所以这里(unsigned char)a的(unsigned char)转换是不可省的
这个问题弄明白了。请看第二个printf函数,里面的(unsigned char)a 对应的输出控制符还是%d , 但输出却是正常的255呢?