【问题标题】:How occur the allocation of variable of type unsigned short and unsigned long in C programming language?在 C 编程语言中,unsigned short 和 unsigned long 类型的变量如何分配?
【发布时间】:2014-01-07 21:29:24
【问题描述】:

根据书籍,整数类型的变化占用或多或少的内存字节,具体取决于体系结构,但是 unsigned short 类型的值可以达到 65 535,因为 unsigned long 类型为 4 294 967 295。

到目前为止一切都很好,但是当我们想到格式占位符时,我们可以看到 int 类型的哪些变体(例如 short 和 long)具有您自己的格式占位符; %hd%ld,分别。 通过这种方式,我们可以知道将为这种类型保留多少字节,因为我们知道我们正在显式使用数据类型,但是,对于 unsigned short 和 unsigned long 类型,只有一个格式占位符:%u

对我来说,这意味着我无法控制将在此变量中设置的数字,我的意思是,我必须像 unsigned 一样声明变量,编译器将解释他的数字是否属于 unsigned short 或 unsigned 范围长。

声明这种类型的变量的正确形式是什么?

unsigned short <identifier_variable>;

unsigned short int <identifier_variable>;

或者只是:

unsigned <identifier_variable>;

如果数字属于无符号短类型的范围,将为该变量保留2 bytes,否则如果分配的数字属于无符号长类型,则一切正常工作,为该变量保留的字节数将为@ 987654327@.

那么,我必须如何做这个声明,还有其他我在 GNU 文档中找不到的格式占位符吗?

【问题讨论】:

  • 您的问题是什么?是在C 还是C++
  • 1.选择 C ​​或 C++,而不是两者。 2.unsignedunsigned int相同,unsigned shortunsigned short int相同
  • uintN_t 在 C99 中。 PRIuN .
  • @ElliottFrisch 我只是用标签 C++ 签名,因为谁编程 C++ 通常对 C 有很多了解。我在 C 的标题上引起了人们的注意,但看起来更好这似乎不是一个好习惯。

标签: c formatting


【解决方案1】:

到目前为止一切都很好,但是当我们想到格式占位符时,我们可以看到 int 类型的哪些变体(例如 short 和 long)具有您自己的格式占位符; %hd%ld,分别。通过这种方式,我们可以知道将为这种类型保留多少字节,因为我们知道我们正在显式使用数据类型,但是,对于 unsigned short 和 unsigned long 类型,只有一个格式占位符:%u

更正:无符号短和无符号长有%hu%lu。请注意这些如何反映签名格式占位符。 %d%u 分别用于有符号和无符号 ints。 hl 修饰符将 int 更改为 shortlong

%hd     signed short
%hu   unsigned short
%d      signed int
%u    unsigned int
%ld     signed long
%lu   unsigned long

声明这种类型的变量的正确形式是什么?

unsigned short <identifier_variable>;

unsigned short int <identifier_variable>;

或者只是:

unsigned <identifier_variable>;

前两个是等价的。最后一个unsigned 表示unsigned int 而不是unsigned short

请注意,shortshort int 的简写,longlong int 的简写。还隐含了signed,因此signed intint 相同。 (例外:charsigned char 不同,它是具有实现定义的签名的不同类型。)

以下是编写基本整数类型的所有不同方式:

char
signed char
unsigned char
short          AKA signed short, signed short int
unsigned short AKA unsigned short int
int            AKA signed, signed int
unsigned       AKA unsigned int
long           AKA signed long, signed long int
unsigned long  AKA unsigned long int

【讨论】:

    【解决方案2】:

    %u 格式说明符指定应将变量内容解析为无符号值。你可以将它与长度子说明符结合起来,这样你就可以拥有%hu(对于unsigned short)、%lu(对于unsigned long)等。

    这里有一张不错的桌子:http://www.cplusplus.com/reference/cstdio/printf/

    【讨论】:

      【解决方案3】:

      关于“占位符”,阅读 C 标准会很有用

      h 指定后面的 d、i、o、u、x 或 X 转换说明符 适用于 short int 或 unsigned short int 参数(参数 将根据整数促销进行促销,但其 值应转换为 short int 或 unsigned short int 之前 印刷);或者后面的 n 转换说明符适用于 指向短整型参数的指针。

      至于声明,单独使用的类型说明符unsigned 等同于unsigned int。如果你想声明一个 unsigned short 类型的对象,你必须指定两个简单的说明符

      unsigned short SomeVariable;
      

      【讨论】:

        【解决方案4】:

        对于 unsigned short 和 unsigned long 类型,只有一个格式占位符:%u。

        没有。对于unsigned sort,使用的格式说明符是%hu,而%lu 用于unsigned long

        C11:7.21.6 格式化输入/输出函数:

        h 指定后面的 d, i, o, u, xX 转换说明符适用于 short intunsigned short int 参数(该参数将根据整数提升进行提升,但其值应在打印前转换为short intunsigned short int);或者后面的 n 转换说明符适用于指向 short int 参数的指针。


        声明这种类型的变量的正确形式是什么?

        前两个是unsigned sort 类型的正确声明。但第三个是错误的。相当于

        unsigned int <identifier_variable>;
        

        【讨论】:

          猜你喜欢
          • 2012-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多