我想知道值0x7FFF和32767之间有什么区别。据我所知,它们都应该是整数,唯一的好处是符号方便。它们将占用相同数量的内存,并以相同的方式表示,或者是否有另一个选择将数字写为0x
与基数10的原因?
答案 0 :(得分:8)
唯一的优点是一些程序员发现在他们的头脑中更容易在基数16和二进制之间进行转换。由于每个基数16位正好占据4位,因此可视化位的对齐要容易得多。在基地2写作非常麻烦。
答案 1 :(得分:3)
未修饰的十进制整数常量的类型始终是有符号的。当您点击由整数类型的宽度确定的各种边界值时,未修饰的十六进制或八进制常量的类型在有符号和无符号之间交替。
对于装饰为无符号的常量(例如0xFU
),没有区别。
此外,无法将0表示为十进制文字。
参见C ++ 11中的表6和C11中的6.4.4.1/5。
答案 2 :(得分:2)
两者都是整数文字,只是提供表达相同数字的不同方法。使用一种形式而不是另一种形式没有技术优势。
请注意,您也可以使用八进制表示法(通过在0前面加上值)。
答案 3 :(得分:1)
一个是十六进制 - 基数为16 - 另一个是十进制?
答案 4 :(得分:1)
0x7FFF表示法比十进制表示法更清楚潜在的上溢/下溢。
如果你使用的是16位宽的东西,那么0x7FFF会提醒你,如果你以有符号的方式使用这些位,你就可以获得这16位可以容纳正值的有符号值的最大值。加1,你就会溢出。
32位宽也一样。它可以容纳的最大值(有符号,正数)是0x7FFFFFFF。
您可以直接从十六进制表示法看到这些最大值,而不能使用十进制表示法。 (除非你碰巧记得32767是16位的正符号最大值)。
(注意:当二进制补码用于区分正值和负值(如果16位保持有符号值)时,上述情况属实)。
答案 5 :(得分:0)
确实如此,没有区别。任何差异都在存储值的变量中。文字0x7FFF和32767在各方面都与编译器相同。
答案 6 :(得分:0)
选择将0x7fff或32767写入源代码中,它只是程序员的选择,因为这些值以相同的方式存储在计算机内存中。
例如:当我需要使用4位而不是经典字节进行操作时,我会更舒服地使用0x表示法。
如果我需要提取char变量的低4位,我会做
res = charvar & 0x0f;
那是相同的:
res = charvar & 15;
后者不太直观和可读,但操作相同