gpt4 book ai didi

c++ - 如果一个整数默认是有符号的,那么为什么会存在signed关键字呢?

转载 作者:行者123 更新时间:2023-12-03 10:03:50 26 4
gpt4 key购买 nike

我很好奇为什么存在 signed 关键字,因为我相信大多数整数和其他变量在默认情况下都是有符号的。将 signed 关键字放在 int 之前几乎没有任何作用。它有什么用途,为什么存在?

最佳答案

signed 至少有两个地方关键字不是空操作:

  • char :“普通”的签名char是实现定义的。在它是无符号类型的实现上,signed char需要获得签名的变体。即使 char是有符号类型,signed char , char , 和 unsigned char都是不同的类型。
  • 使用位域:没有显式签名的位域成员具有实现定义的签名。例如,在
    struct foo {
    int b:1;
    };
    b 的取值范围可能是 { -1, 0 } 或 { 0, 1 } 取决于实现。如果您想确保获得签名版本,您需要 signed关键词。请注意,虽然标准对此不是很清楚,但在流行的实现中,这适用于 typedef也是:如果位域成员使用 typedef不包括显式签名的定义类型,实现定义的签名(在 GCC 上,由 -fsigned-bitfields 设置)也适用于那里。这意味着像 int32_t 这样的类型应该使用 signed 定义关键字以避免在位域中使用时出现非常糟糕的意外行为。
  • 关于c++ - 如果一个整数默认是有符号的,那么为什么会存在signed关键字呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64993672/

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