integer-promotion

    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:

    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 <<