integer-promotion

    2熱度

    1回答

    在gcc中,對小於int的整數類型加上或減去一個常數會得到一個int。 #include <cstdint> #include <cstdio> int main() { int8_t wat = 5; printf("%zd\n", sizeof(wat + 1)); return 0; } 給我4.使用帶有-Wconversion簡單+=語句時注意到

    5熱度

    1回答

    我一直在尋找通過C++ Integer Overflow and Promotion,試圖複製它,終於結束了這一點: #include <iostream> #include <stdio.h> using namespace std; int main() { int i = -15; unsigned int j = 10; cout << i+j <<

    10熱度

    3回答

    我最近讀了 unsigned char x=1; printf("%u",x); 調用不確定的行爲,因爲由於格式說明%U,預計的printf一個unsigned int。但是我仍然想知道這個例子中發生了什麼。 我認爲積分促銷規則適用於表達式printf("%u",x) 和x表示的值。 A.6.1積分促進 字符,短整數,或整數位字段中,所有符號或沒有,或枚舉類型的 對象,可以在表達式無論使用可

    4熱度

    4回答

    const auto min = -std::numeric_limits<T>::max(); T x = min; // conversion from 'const int' to 'short', possible loss of data T是模板參數,在這種情況下爲short。一元減號顯然進行整體推廣。 爲什麼一元減執行整數提升? 如果auto更改爲T不生成警告,但它應該將短整型

    2熱度

    2回答

    有人能解釋我爲什麼: x = x << 1; x = x >> 1; 和: x = (x << 1) >> 1; 生產用C不同的答案? x是* uint8_t *類型(無符號的1字節長整數)。例如,當我在第一種情況下通過128 (10000000)時,它將返回0(如預期的最重要的位掉出),但在第二種情況下,它將返回原始的128。這是爲什麼?我希望這些表達式是相等的?

    2熱度

    3回答

    本主題在很多情況下都經過了深入討論。當我搜索並閱讀一些帖子時。後來發帖讓我很困惑。 Signed to unsigned conversion in C - is it always safe? 以下是原來的問題。 unsigned int u = 1234; int i = -5678; unsigned int result = u + i; 答案簡單地引用了「6.3.1.8通常的算術

    7熱度

    2回答

    與問題Bitshift and integer promotion?類似,我有一個關於使用左移位時整數提升的問題。 unsigned int test(void) { unsigned char value8; unsigned int result; value8 = 0x12; result = value8 << 8; return re

    18熱度

    1回答

    common_type<long, unsigned long>::type是unsigned long因爲涉及以後整體推廣的標準說,操作數... [...]如果具有無符號整數類型操作數的秩大於或等於 的類型的秩另一個操作數,與 符號整型操作數應轉換爲操作數的類型與 無符號整型 不叫整體推進體制越野車,但它好像如果有一個更大有符號整數類型wh它可以表示它應該使用的有符號和無符號操作數的範圍。 我知

    14熱度

    4回答

    是否一個浮點數據類型(例如double)的存在確保所有+, - ,*,/,%等數學運算假設雙操作數? 如果故事比這更復雜,是否有描述這些規則的資源?我不應該問這樣的問題,並且當方程的結果是double時,總是明確地投下int到double。以下是我正在考慮的一些等式。我故意沒有在我的系統上編譯和運行,因爲這是可能依賴於編譯器的東西。 int a(1), b(2), c(3); double d(

    2熱度

    2回答

    我對如何在固定點環境中處理算術計算有點困惑。 考慮下面的代碼行: /* unsigned short is 16 bit.*/ unsigned short x = 1000; unsigned short res; /* Case1: The following yields correct result in res */ res = (x*544/100); /* Case2: