【发布时间】:2015-06-30 21:53:36
【问题描述】:
据我所知,C 中无符号字符的范围是 0-255。但是当我执行下面的代码时,它会打印 256 作为输出。这怎么可能?我从“测试你的 C 技能”一书中得到了这段代码,其中说 char 大小是一个字节。
main()
{
unsigned char i = 0x80;
printf("\n %d",i << 1);
}
【问题讨论】:
-
发布的代码将导致编译器发出一些警告。例如,编写 main() 函数只有 2 种有效方式(另加一种可选方式)。 1) int main( void ) 2) int main( int argc, char * argv[]) 和可选:int main()。请注意,它们都有一个“int”返回类型。大多数情况下,当从 main() 返回时,需要“有效”状态指示。所以最后一个可执行语句应该是'return(status);'其中状态通常为 0,除非发生错误
-
0x80 不是 255,而是 128。无符号字符被“提升”为无符号整数。所以将 0x00000080 左移一位是 0x00000100。打印结果为 256。建议阅读 C 中的参数提升
-
请注意,
unsigned char不限于 0-255 范围内。 -
@user3629249 如果您声明一个函数而不指定返回类型,则隐式返回
int。此外,int main(void)不是main函数的可移植声明。
标签: c