gpt4 book ai didi

c - 带符号类型的移位运算符

转载 作者:太空狗 更新时间:2023-10-29 17:06:21 24 4
gpt4 key购买 nike

我试图了解按位运算符在有符号和无符号类型上的行为。根据 ISO/IEC 文档,以下是我的理解。

左移运算符

  • E1 << E2 的结果, 是E1左移E2位的位置

  • 左移空出的位用0填充。

  • E1 有符号非负: E1 << E2如果该值可由结果类型表示,则结果为 E1 乘以 E2 的 2 次幂。

  • Q1:签名底片呢?

  • 问题 2:我无法理解以下上下文中“约简模数”的含义。 "如果 E1 有一个无符号类型,结果的值是 E1 × 2E2 ,减少模数比结果类型中可表示的最大值多一”

右移运算符

  • E1 >> E2 的结果是 E1 右移 E2 位位置。

  • E1 as signed non-negative/unsigned:结果的值为E1/2E2的商的整数部分

  • Q3:对于有符号的负整数,我看到有些书上定义空缺的位置会用1来填补.请详细说明右移运算符在有符号负整数上的使用。

最佳答案

问题 1:左移运算符对有符号整数类型的负值的行为未定义,当结果为 E1 * 2^E2 时对有符号整数类型的正值的行为也是未定义的。在类型中不可表示。

标准(n1570 草案)第 6.5.7 节第 4 段和第 5 段中明确提到:

4 The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits are filled with zeros. If E1 has an unsigned type, the value of the result is E1 × 2^E2 , reduced modulo one more than the maximum value representable in the result type. If E1 has a signed type and nonnegative value, and E1 × 2^E2 is representable in the result type, then that is the resulting value; otherwise, the behavior is undefined.

Q2:缩减模数比无符号整数类型中可表示的最大值多一意味着左边移出的位被简单地丢弃。

在数学上,如果无符号类型的最大值是2^n - 1 (它总是那种形式),转移 E1 的结果离开 E2位是值 V在 0 到 2^n - 1 的范围内这样的区别

(E1 * 2^E2 - V)

2^n整除,也就是说,它是除以 E1 * 2^E2 时得到的余数通过 2^n .

Q3:将有符号整数类型的负值右移时的行为是实现定义的。最常见的行为(至少在二进制补码机器上)是算术移位,即结果是商向下舍入(向负无穷大)。

5 The result of E1 >> E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type or if E1 has a signed type and a nonnegative value, the value of the result is the integral part of the quotient of E1 / 2^E2 . If E1 has a signed type and a negative value, the resulting value is implementation-defined.

关于c - 带符号类型的移位运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13544519/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com