繁体   English   中英

0x7FFF和32767的类型有什么区别?

[英]What is the difference between the types of 0x7FFF and 32767?

我想知道值0x7FFF和32767之间有什么区别。据我所知,它们都应该是整数,唯一的好处是符号方便。 它们将占用相同数量的内存,并以相同的方式表示,或者是否有另一个选择将数字写为0x与基数10的原因?

唯一的优点是一些程序员发现在他们的头脑中更容易在基数16和二进制之间进行转换。 由于每个基数16位正好占据4位,因此可视化位的对齐要容易得多。 在2号基地写作非常麻烦。

未修饰的十进制整数常量的类型始终是有符号的。 当您点击由整数类型的宽度确定的各种边界值时,未修饰的十六进制或八进制常量的类型在有符号和无符号之间交替。

对于装饰为无符号的常量(例如0xFU ),没有区别。

此外,无法将0表示为十进制文字。

参见C ++ 11中的表6和C11中的6.4.4.1/5。

两者都是整数文字,只是提供表达相同数字的不同方法。 使用一种形式而不是另一种形式没有技术优势。

请注意,您也可以使用八进制表示法(通过在0前面加上值)。

一个是十六进制 - 基数为16 - 另一个是十进制?

0x7FFF表示法比十进制表示法更清楚潜在的上溢/下溢。

如果你使用的是16位宽的东西,0x7FFF会提醒你,如果你以有符号的方式使用这些位,那么你就可以获得这16位可以容纳正值的有符号值的最大值。 添加1,你就会溢出。

32位宽也一样。 它可以容纳的最大值(有符号,正数)是0x7FFFFFFF。

您可以直接从十六进制表示法看到这些最大值,而不能使用十进制表示法。 (除非你碰巧记住32767是16位的正符号最大值)。

(注意:如果16位保持有符号值,则使用二进制补码来区分正值和负值时,如上所述)。

确实如此,没有区别。 任何差异都在存储值的变量中。 文字0x7FFF和32767在各方面都与编译器相同。

请参见http://www.cplusplus.com/doc/tutorial/constants/

选择将0x7fff或32767写入源代码中它只是程序员的选择,因为这些值以相同的方式存储到计算机内存中。

例如:当我需要使用4位而不是经典字节进行操作时,我会更舒服地使用0x表示法。

如果我需要提取char变量的低4位,我会这样做

res = charvar & 0x0f;

这是相同的:

res = charvar & 15;

后者不太直观和可读,但操作是相同的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM