在下面的程序中,似乎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)
是否会以不同的方式处理整数提升,因此打印值不是257?
号整数促销活动总是发生,这意味着双方a[0]并a[1]提升到int移位或按位或发生之前.
从规格:
如果a
int可以表示原始类型的所有值(由宽度限制,对于位字段),该值将转换为int...