问题标签 [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.
c++ - 在表达式 bool << integer 中,bool 是提升为 int,还是提升为与 integer 相同的类型?
考虑以下代码:
做操作的时候,E1
提升为与 相同的类型E2
,还是先提升到int
,再提升到std::common_type<E1, E2>::type
?
换句话说,就是:
已定义或未定义的行为?
c - C中的变量提升
我无法弄清楚为什么在每种特定情况下输出都不同。在示例代码 a 中,正如我所料,有一个变量提升,结果是> 6
,但在示例代码 b 中,结果是<= 6
:
输出:
c++ - C++中大端长的转换?
我需要一个 C++ 函数,它返回解释为 bigendian long 的四个连续字节的值。指向第一个字节的指针应该更新为指向最后一个字节之后。我尝试了以下代码:
例如,如果 p 指向 00 00 00 A0,我希望结果是 160,但它是 0。怎么会?
c++ - 布尔值的左移和右移
我试图了解积分提升如何与算术移位运算符一起工作。特别是,我想知道,哪些值a, b, c, d, e, f, g, h
是根据 C++14 标准精确定义的,哪些值可以依赖于平台/硬件/编译器(假设sizeof(int) == 4
)。
c - 32 位系统中的无符号短整数提升
我有一个 32 位整数大小
如果我有一个算术表达式
我相信 current_time 和 last_time 在减法之前都会被转换为signed int 32。16 位整数大小系统没有问题,但是对于这个 32 位整数大小系统,是否会因为整数提升而产生负值?
c - 为什么 uint64_t 的高 32 位在执行特定的按位运算时变为 1?
有人可以向我解释一下为什么在 #2 的情况下 a 的高 32 位uint64_t
设置为 1:
输出:
你会注意到我给出了一个“等效”的 32 位版本(案例 #3 和 #4),它没有表现出相同的行为......
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,整数提升不会发生。
我真的很困惑。请问你能帮帮我吗?先感谢您。
c - C中的文字和变量(有符号与无符号短整数)有什么区别?
我在Computer Systems: A Programmer's Perspective, 2/E 一书中看到了以下代码。这很好用并创建了所需的输出。输出可以通过有符号和无符号表示的差异来解释。
上面的代码产生-1 >= 0u
了,但是,与上面相同的下面的代码没有!换句话说,
产量-1 < 0u
。为什么会这样?我无法解释这一点。
请注意,我见过类似的问题,但它们没有帮助。
PS。正如@Abhineet 所说,可以通过更改short
为int
. 然而,如何解释这种现象呢?换句话说,-1
在 4 个字节中是0xff ff ff ff
,在 2 个字节中是0xff ff
。给定它们作为被解释为 的 2s 补码,它们具有和unsigned
的对应值。它们都不少于,我认为在这两种情况下,输出都必须是,即。4294967295
65535
0
-1 >= 0u
x >= u
在小端英特尔系统上的示例输出:
简而言之:
对于整数:
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
有用的资源:
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
编辑:我已经在下图中展示了这个问题。
c++ - 乘以 unsigned short 会导致未定义的行为吗?
int
我在问自己,在某些情况下,是否提升所有类型(除了一些例外)的等级低于int
执行算术运算可能会导致 UB。
例如:
由于 unsigned short 被提升为int
算术运算,这将导致:
As(int)0xFFFF*(int)0xFFFF
会导致溢出,而有符号类型的溢出是 UB:在以下情况下,两个无符号短裤相乘x,y
会导致未定义的行为x*y > INT_MAX
更新:
该问题专门针对int
32 位和short
16 位的情况。