0177对177和他们的补充

时间:2017-05-16 17:18:01

标签: c

在c中,为什么~177会产生-178,而~0177会产生-128?

我尝试在前后打印出值,但无法识别任何内容。我也无法解释这个话题。我正在阅读“C程序设计语言”。

2 个答案:

答案 0 :(得分:3)

前导零表示0177是八进制数(127)。

答案 1 :(得分:2)

常量1770177的值不同。前者是十进制,后者是八进制。

来自C standard的第6.4.4.1节:

  

3 十进制常量以非零数字开头,由一系列十进制数字组成。 八进制常量由前缀0组成   可选地后跟一个数字0到7的序列。 A.   十六进制常量由前缀0x或0X后跟a组成   十进制数字的序列和字母a(或A)到f(或   F)分别为10到15的值。

     

4 十进制常数的值以10为基数计算; 八进制常数,基数为8 ;十六进制常数,基数为16   词法上第一个数字是最重要的。

八进制常量0177等于127。作为32位十六进制值,它表示为0x0000007f。在此值上使用~运算符可为您提供0xffffff80。假设2为负数的补码表示,则为十进制的-128。