代码之家  ›  专栏  ›  技术社区  ›  WilliamKF

如何在C++中指定无符号字符的整数文本?

  •  36
  • WilliamKF  · 技术社区  · 15 年前

    我可以指定一个无符号类型的整型文字,如下所示:

    const unsigned long example = 9UL;
    

    对于无符号字符,我该如何处理?

    const unsigned char example = 9U?;
    

    这是为了避免编译器警告:

    unsigned char example2 = 0;
    ...
    min(9U?, example2);
    

    我希望避免在调用m in的行中出现我当前拥有的并且没有“unsigned char”的冗长解决方案,而不在单独的行中的变量中声明9:

    min(static_cast<unsigned char>(9), example2);
    
    9 回复  |  直到 8 年前
        1
  •  27
  •   Michael Burr    15 年前

    C没有提供指定宽度小于类型的整数常量的标准方法 int .

    然而, stdint.h 是否提供 UINT8_C() 宏来做一些与您所要查找的内容非常接近的事情,就像在C语言中一样。

    但大多数人要么不使用后缀(得到一个 int 常数) U 后缀(获得 unsigned int 常数)。对于char大小的值,它们工作得很好,这几乎就是 施蒂特 无论如何,宏。

        2
  •  34
  •   user4832129    8 年前

    C++ 11引入了用户定义的文字。它可以这样使用:

    inline constexpr unsigned char operator "" _uchar( unsigned long long arg ) noexcept
    {
        return static_cast< unsigned char >( arg );
    }
    
    unsigned char answer()
    {
        return 42;
    }
    
    int main()
    {
        std::cout << std::min( 42, answer() );        // Compile time error!
        std::cout << std::min( 42_uchar, answer() );  // OK
    }
    
        3
  •  19
  •   janm    15 年前

    你可以投射常量。例如:

    min(static_cast<unsigned char>(9), example2);
    

    还可以使用构造函数语法:

    typedef unsigned char uchar;
    min(uchar(9), example2);
    

    并非所有编译器都需要typedef。

        4
  •  10
  •   Mr Lister hawi    13 年前

    如果您使用Visual C++,并且不需要编译器之间的互操作性,则可以使用 UI8 数字的后缀,使其成为无符号8位常量。

    min(9ui8, example2);
    

    但是,对于像“9”这样的实际char常量,您不能这样做。

        5
  •  7
  •   E.M.    15 年前

    假设您正在使用 std::min 您实际应该做的是显式指定什么类型 min 应该这样使用

    unsigned char example2 = 0;
    min<unsigned char>(9, example2);
    
        6
  •  4
  •   Kyle Lutz    15 年前

    简单地 const unsigned char example = 0; 会好的。

        7
  •  0
  •   Axel Gneiting    15 年前

    我想 '\0' 将是一个值为0的char文本,但我也看不到这一点。

        8
  •  0
  •   user261840    15 年前

    无符号字符类型没有后缀。整数常量可以是 int long ( signed unsigned 在C99中 long long . 只要值在无符号字符的有效范围内,就可以不用担心使用普通的“u”后缀。

        9
  •  0
  •   Clive    8 年前

    问题是如何“在C++中指定类型的无符号字符的整数”?。而不是如何声明标识符。

    在撇号中使用转义反斜杠和八进制数字。(例如‘177’)

    八进制值总是被认为是无符号的。