在"uint8_t |(uint8_t << 8)"中是否有不同的方式处理整数提升?

drd*_*dot 2 c c++ integer

在下面的程序中,似乎a [1]被移位8位并且变为0并且打印值应该是1.但是实际上发生整数提升并且b的打印值是257.我正在运行gcc版本4.8. 2在x86-64上.

这是一个问题:整数提升是否会以不同的方式处理,因此打印值不是257而不更改处理器和编译器更改代码(处理器选项仅限于x86,x86-64和所有ARM)?

#include<stdio.h>
#include<stdint.h>
#include<inttypes.h>

int main(){
  uint8_t *a;
  a = (uint8_t *)malloc(sizeof(uint8_t)*2);
  uint16_t b;
  a[0] = 1; a[1] = 1;
  b = a[0] | (a[1] << 8);
  printf("b = %d\n", b);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 9

是否会以不同的方式处理整数提升,因此打印值不是257?

号整数促销活动总是发生,这意味着双方a[0]a[1]提升到int移位或按位或发生之前.

从规格:

如果a int可以表示原始类型的所有值(由宽度限制,对于位字段),该值将转换为int...