在c中,为什么~177会产生-178,而~0177会产生-128?
我尝试在前后打印出值,但无法识别任何内容。我也无法解释这个话题。我正在阅读“C程序设计语言”。
答案 0 :(得分:3)
前导零表示0177
是八进制数(127)。
答案 1 :(得分:2)
常量177
和0177
的值不同。前者是十进制,后者是八进制。
来自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。