编译器是否隐式转换int类型

时间:2011-05-13 07:10:01

标签: c int

如果将值设置为int,例如2,编译器是否将int类型转换为它需要的大小,例如int8_t或uint16_t等?

5 个答案:

答案 0 :(得分:1)

不在香草C中,没有。如果你不告诉它,编译器就无法知道你意味着什么

答案 1 :(得分:0)

如果你写

int value = 2;

默认情况下,类型为signed int。编译器的作用实际上取决于平台,但它必须保证int的大小不小于short int并且不大于long int'。s

答案 2 :(得分:0)

对于常数,它可能是真的,通常也会进行从小到大的反向转换:例如,byte到int。

它在某种程度上取决于编译器使用的实现和优化技术以及体系结构/ OS的数据对齐要求。看看这个write up

答案 3 :(得分:0)

编译器首先查看表达式的上下文,了解它所期望的类型。背景可以是,即

  • 作业的左侧
  • 函数头或运算符定义
  • 提供的预期参数类型

然后评估表达式,根据需要插入隐式类型转换(类型强制)。它确实

  • 促销
  • 截断
  • 舍入

在所有位都很重要的情况下,您需要非常小心您所写的内容:类型,运算符和顺序。

答案 4 :(得分:0)

整数是“int”类型的值。使用运算符“=”为short或char分配整数值时,int值将转换为short或char。编译器可以检测到这种转换并进行优化以在编译时转换整数值。

short a = 50; //50 is an int, it will be implicitly converted to short. The compiler may convert 50 to short on compile time.
int b = 60;
short c = b; //the value of b will be converted to short and assigned to c.
short d = b + 70; //b + 70 is a sum of ints and the result will be an int that will be converted to short.

int8_t和uint16_t不是标准类型。很多时候,这些类型可能被定义为:

typedef char int8_t;
typedef unsigned short uint16_t;