标题:八进制常量可以带负号吗
只看楼主
哆啦A萌
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-8-12
 问题点数:0 回复次数:5 
八进制常量可以带负号吗
老师说不可以,如-077就是错的
但我在百度里看到-077是对的
迷惑
搜索更多相关主题的帖子: 百度 八进制 
2014-08-12 21:22
乖乖0943
Rank: 2
等 级:论坛游民
帖 子:33
专家分:42
注 册:2014-8-1
得分:0 
不可以的,八进制通常是无符号数。
2014-08-12 21:26
哆啦A萌
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-8-12
得分:0 
您说不可以,又说通常无符号,那八进制有符号的情形是怎样的呢?
2014-08-12 21:29
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
-077 是正确的常量表达式

告诉个吓人^_^的知识点:其实,所有常数都没有符号。
比如 -1,其中 1 才是整型常量,而 -1 是 - 和 1 的组合表达式。
(当然,这个知识点对你无用。只有在很少情况下才需要注意,例如有点库 #define INT_MIN (-2147483647-1),而不能 #define INT_MIN -2147483648)

八进制常量 和 十进制常量 唯一的区别在于:
十进制常量(不考虑带u\l\ll等后缀的情况)类型依次扩展表为 int, long int, long long int
八进制常量(不考虑带u\l\ll等后缀的情况)类型依次扩展表为 int, unsigned int, long int, unsigned long int, long long int, unsigned long long int
说简单点,比如 ???,如果是无后缀的十进制常量,则能用int存得下它就用int,不能的话就用long,还不能的话就用long long。(可以看出全是signed类型)
而如果 ??? 是无后缀的八进制常量,则能用int存得下它就用int,不能的话就用unsigned int,还不能的话就用long,……。(可以看出既有是signed类型也有unsigned类型。)

参考:《ISO/IEC 9899:201x》 之 6.4.4.1 Integer constants
2014-08-13 09:55
乖乖0943
Rank: 2
等 级:论坛游民
帖 子:33
专家分:42
注 册:2014-8-1
得分:0 
回复 楼主 哆啦 A 萌
程序代码:
#include<stdio.h>
void main()
{
    int a,b;
    a=-077;
    b=077;
    printf("a=%o",a);
    printf("\n");
    printf("b=%o",b);
    printf("\n");
}


我不知道怎么解释,但是我的c语言笔记是这么记的,至于为什么的原因你问问版主吧。
2014-08-13 12:02
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:0 
为什么不可以?编译之后,都是二进制存储格式。带不带符号,是人对同一个二进制数据的理解不同所致,不是数本身的事。

[ 本帖最后由 TonyDeng 于 2014-8-13 12:34 编辑 ]

授人以渔,不授人以鱼。
2014-08-13 12:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-434960-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.353309 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved