C语言八进制数(避坑指南)

1. C语言中进制数的表示

        十进制。比如20,457; 
        十六进制,以0x开头。比如0x7a; 
        八进制,以0开头。比如05,0237;

        C语言没有二进制输入,最多可用函数去实现。

        二进制:逢二进一;所以只有0/1
        八进制:逢八进一;所以不能有8/9
        十进制:逢十进一;所以只能0-9
        十六进制:逢十六进一;0-9+A(10)-F(15)

2. 八进制数的表达方式

        C/C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0(数字0),如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。

int Var_DEC = 10;//10
int Var_OCT = 010;//8		八进制,以0开头
int Var_HEX = 0x10;//16		十六进制,以0x开头
printf("Var_DEC=%d, Var_OCT=%d, Var_HEX=%d\n", Var_DEC, Var_OCT, Var_HEX);

char buff5[] = "123456789\cd987654321";		\c:没有实际含义
//单个反斜杠,在字符串中会被当做转义字符处理,若后续没有实际含义,会提示warning: warning: unknown escape sequence '\c',并且不会将\打印出来
char buff5[] = "123456789\1237654321";		\12:换行符
//若后续有实际含义,会将转换后的字符打印出来
char buff5[] = "123456789\\12987654321";
//打印出1个\字符

        执行结果:Var_DEC=10, Var_OCT=8, Var_HEX=16

注:

        1)用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制(随之也挖好了坑)

        2)但在用于表达字符的“转义符”表达法时,可以忽略前面的0;

3. 避坑

先上例子:

char buff1[] = "abcdef0123456789\0123456789";
printf("buff1=%s\n", buff1);
char buff2[] = "abcdef0123456789\0123456789";
printf("buff2=%s, buff2[6]=%c\n", buff2, buff2[6]);
buff2[6] = '\0';
printf("buff2=%s\n", buff2);

char buff3[] = "abcdef\61\62\63\64\65\66\67\68\69";
char buff4[] = "abcdef\061\062\063\064\065\066\067\068\069";
printf("buff3=%s, buff4=%s\n", buff3, buff4);

理想:在buff1和buff2字符串中插入\0字符作为结束符;

分析:

        1)用一个转义符'/'加上一个特殊字母来表示某个字符的方法,如:'\n'表示换行(line),而'\t'表示Tab字符,'\''则表示单引号;

        2)另一种使用转义符的方法:转义符'\'后面接一个八进制数,用于表示ASCII码等于该值的字符

        3)八进制用于表达字符的“转义符”表达法时,可以忽略前面的0;

附:(八进制0XXX所表示的ASCII字符)

  • 7
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值