簡體   English   中英

比較中是否將char轉換為int?

[英]Are chars converted to ints in a comparison?

我試圖了解下面的比較語句中發生了什么。

int n = 1;

std::puts( ((char*)&n)[0] == 1 ? "-Y-" : "-N-" );

上面的輸出對我來說是-Y-

我的第一個問題是,為什么將指針轉換為char*而不是int*

另外,如果我們將char與int進行比較,則答案似乎應該是-N-

1比較時,char是否自動轉換為int?

那是一些可怕的代碼,但是它輸出-Y-的原因是因為您正在將int n的內容有效地視為一個字節數組,並且計算機的字節順序使得它存儲int = 1的值與char[] = { 1 , 0 , 0, 0}; (不要依賴這個!)

因此,這就像你在做

int someInt = 1;
char someChar = 1;
if (someInt == someChar)
{
  puts("-Y"-):
}
else
{
  puts("-N"-):
}

要回答第二個問題(和標題問題),可以,C ++(和C)將隱式進行類型提升:請參閱C ++運算符中的隱式類型轉換規則

答案取決於耐久性:

>>> struct.pack('<i', 1)
'\x01\x00\x00\x00'
>>> struct.pack('>i', 1)
'\x00\x00\x00\x01'

-Y-對應於小尾數字節順序。

您可能將char與int進行了比較,但是char在這里的值是什么? 您不能僅僅從發布的代碼中看出來,並且在不同的環境中可能有所不同。

您不是將char轉換為int並進行比較,而是將int的一部分進行了切片,將其視為char,然后對其進行了推廣並進行了比較。 在小端計算機上,它可能是1,在大端計算機上,可能是0。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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