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