如果将值设置为int,例如2,编译器是否将int类型转换为它需要的大小,例如int8_t或uint16_t等?
答案 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;