簡體   English   中英

C ++中8位整數和32位整數之間的按位AND

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM