问题标签 [integer-promotion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
463 浏览

c++ - 在表达式 bool << integer 中,bool 是提升为 int,还是提升为与 integer 相同的类型?

考虑以下代码:

做操作的时候,E1提升为与 相同的类型E2,还是先提升到int,再提升到std::common_type<E1, E2>::type

换句话说,就是:

已定义或未定义的行为?

0 投票
1 回答
1414 浏览

c - C中的变量提升

我无法弄清楚为什么在每种特定情况下输出都不同。在示例代码 a 中,正如我所料,有一个变量提升,结果是> 6,但在示例代码 b 中,结果是<= 6

输出:

0 投票
2 回答
398 浏览

c++ - C++中大端长的转换?

我需要一个 C++ 函数,它返回解释为 bigendian long 的四个连续字节的值。指向第一个字节的指针应该更新为指向最后一个字节之后。我尝试了以下代码:

例如,如果 p 指向 00 00 00 A0,我希望结果是 160,但它是 0。怎么会?

0 投票
2 回答
2048 浏览

c++ - 布尔值的左移和右移

我试图了解积分提升如何与算术移位运算符一起工作。特别是,我想知道,哪些值a, b, c, d, e, f, g, h是根据 C++14 标准精确定义的,哪些值可以依赖于平台/硬件/编译器(假设sizeof(int) == 4)。

0 投票
2 回答
480 浏览

c - 32 位系统中的无符号短整数提升

我有一个 32 位整数大小

如果我有一个算术表达式

我相信 current_time 和 last_time 在减法之前都会被转换为signed int 32。16 位整数大小系统没有问题,但是对于这个 32 位整数大小系统,是否会因为整数提升而产生负值?

0 投票
1 回答
371 浏览

c - 为什么 uint64_t 的高 32 位在执行特定的按位运算时变为 1?

有人可以向我解释一下为什么在 #2 的情况下 a 的高 32 位uint64_t设置为 1:

输出:

https://ideone.com/xKUaTe

你会注意到我给出了一个“等效”的 32 位版本(案例 #3 和 #4),它没有表现出相同的行为......

0 投票
4 回答
538 浏览

c - char 和 short 在赋值表达式中被降级之前会被提升为 int 吗?

在做了一些研究之后,我知道算术表达式 char 和 short 将在内部提升为 int。但我仍然想知道这样的整数提升是否会在内部分配中发生。

(所以请不要只给我关于其他表达式的链接。我问的是 ASSIGNMENT 表达式内部发生了什么)

问:以下哪项会在内部发生?

1、ch1的值直接赋给ch2。整数促销不会在这里发生。

2、ch1的值先升为int型(8位→32位),再将32位的值降为char型,8位,最终结果。整数促销发生在这里。

我找到了这本书:C Primer Plus,在第 174 页有:

“...当出现在表达式中时,char 和 short,无论有符号还是无符号,都会自动转换为 int,或者如果需要,转换为 unsigned int...”

所以我认为它应该是 2,但我听说有人告诉我它应该是 1,整数提升不会发生。

我真的很困惑。请问你能帮帮我吗?先感谢您。

0 投票
4 回答
973 浏览

c - C中的文字和变量(有符号与无符号短整数)有什么区别?

我在Computer Systems: A Programmer's Perspective, 2/E 一书中看到了以下代码。这很好用并创建了所需的输出。输出可以通过有符号和无符号表示的差异来解释。

上面的代码产生-1 >= 0u了,但是,与上面相同的下面的代码没有!换句话说,

产量-1 < 0u。为什么会这样?我无法解释这一点。

请注意,我见过类似的问题但它们没有帮助。

PS。正如@Abhineet 所说,可以通过更改shortint. 然而,如何解释这种现象呢?换句话说,-1在 4 个字节中是0xff ff ff ff,在 2 个字节中是0xff ff。给定它们作为被解释为 的 2s 补码,它们具有和unsigned的对应值。它们都不少于,我认为在这两种情况下,输出都必须是,即。4294967295655350-1 >= 0ux >= u

在小端英特尔系统上的示例输出:

简而言之:

对于整数:

0 投票
6 回答
6598 浏览

c++ - 为什么无符号短(乘)无符号短转换为有符号整数?

为什么在 C++11中unsigned short * unsigned short转换为?int

int这行代码所示,它太小而无法处理最大值。

在 MinGW 4.9.2 上溢出

因为(来源

USHRT_MAX = 65535 (2^16-1) 或更大*

INT_MAX = 32767 (2^15-1) 或更大*

(2^16-1)*(2^16-1) = ~2^32


我应该期待这个解决方案有什么问题吗?


这个节目

给出输出

这证明在这些编译器上t*t转换为。int


有用的资源:

C中的有符号到无符号转换 - 它总是安全的吗?

有符号和无符号整数乘法

https://bytes.com/topic/c-sharp/answers/223883-multiplication-types-smaller-than-int-yields-int

http://www.cplusplus.com/reference/climits

http://en.cppreference.com/w/cpp/language/types


编辑:我已经在下图中展示了这个问题。

在此处输入图像描述

0 投票
2 回答
1673 浏览

c++ - 乘以 unsigned short 会导致未定义的行为吗?

作为“ https://stackoverflow.com/questions/33732041/why-static-castunsigned-intushrt-maxushrt-max-yields-correct-value ”的后续行动

int我在问自己,在某些情况下,是否提升所有类型(除了一些例外)的等级低于int执行算术运算可能会导致 UB。

例如:

由于 unsigned short 被提升为int算术运算,这将导致:

As(int)0xFFFF*(int)0xFFFF会导致溢出,而​​有符号类型的溢出是 UB:在以下情况下,两个无符号短裤相乘x,y会导致未定义的行为x*y > INT_MAX


更新

该问题专门针对int32 位和short16 位的情况。