smi*_*dha 2 c c++ int gcc bit-manipulation
如果我在8位整数(int8_t)和32位整数(int)之间执行按位AND ,结果是8位整数还是32位整数?
我正在使用GNU/Linux和GCC编译器
为了稍微改变一下这个问题,在执行按位AND之前,是否丢弃了32位整数的前24位,或者是8位整数第一次类型转换为32位整数?
编辑:在这个小代码中
#include <iostream>
#include <stdint.h>
int main()
{
int i=34;
int8_t j=2;
std::cout<<sizeof((i&j))<<std::endl;//Bitwise and between a 32 bit integer and 8 bit integer
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到输出为4.我认为这意味着结果是32位整数.但我不知道结果是否取决于机器,编译器或操作系统.
对于&运算符(以及大多数其他运算符),任何小于的操作数int都将int在计算操作之前被提升.
从C99标准(6.5.10 - 描述按位AND运算符):
通常的算术转换是在操作数上执行的.
(6.3.1.8 - 描述通常的算术转换):
在两个操作数上执行整数提升
(6.3.1.1 - 描述整数提升):
如果a
int可以表示原始类型的所有值,则该值将转换为int; 否则,它被转换为unsigned int.这些被称为整数促销.