[英]Bitwise AND between an 8-bit integer and 32 bit integer in C++
如果我在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;
}
我得到輸出為4.我認為這意味着結果是32位整數。 但我不知道結果是否取決於機器,編譯器或操作系統。
對於&
運算符(以及大多數其他運算符),在計算運算之前,任何小於int
操作數都將被提升為int
。
從C99標准(6.5.10 - 描述按位AND運算符):
通常的算術轉換是在操作數上執行的。
(6.3.1.8 - 描述通常的算術轉換):
在兩個操作數上執行整數提升
(6.3.1.1 - 描述整數提升):
如果
int
可以表示原始類型的所有值,則該值將轉換為int
; 否則,它將轉換為unsigned int
。 這些被稱為整數促銷。
無論語言指定什么,問題的答案是,如果高位24位在按位之前被丟棄並且被執行則無關緊要,因為它們在一個操作數中是全零位,因此在結果中。
8位整數被類型轉換為32位整數。 按位運算符觸發通常的算術轉換(這意味着較小的類型被提升以匹配較大的類型)。 這是在規范的第5.1章中定義的。
小於int
整數類型在對它們執行任何操作之前將提升為int
。 您可能想要了解CERT安全編碼標准關於“理解整數轉換規則”的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.