C语言代码问题。为什么(unsigned int)不起作用?

代码如下:

//测试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才对啊

因为%d转义就是输出带符号整形,所以输出时它会再转为signed int,所以(unsigned int)b根本没有用。
无符号整形为%u,改为%u就会输出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)转换是不可省的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-15
%d -- 又转回去了
%u -- 无符号 输出 用 %u 格式。追问

这个问题弄明白了。请看第二个printf函数,里面的(unsigned char)a 对应的输出控制符还是%d , 但输出却是正常的255呢?

第2个回答  2012-09-15
问题在 %d 显示
第3个回答  2012-09-15
问题在 %d 显示
第4个回答  2019-11-12
既然是读txt文件,就要用文本类型的文件来处理,而file是无类型的文件。
另外,即使是文本,由于编码方式的演变(ascii一一unicode),输出的也可能是不规则的(数字)。