'\ddd'转义字符与八进制转换
所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。
——以上来自百度百科转义字符
直接看代码吧
char c1 = '\012';
char c2 = '\0123';
char c3 = '\0a12';
printf("%c,%c,%c\n",c1,c2,c3);
猜一猜,输出结果是什么?
……
……
……
公布答案:
在屏幕上实际输出了一个换行符 '\n' 一个字符 '3' 一个字符 '2'
\ddd
1到3位八进制数所代表的任意字符 三位八进制
是不是有点懵啊,不是说好的八进制吗,第一个 '\n' 的ascall码为10,刚好等于八进制的 '\012'
为什么后两个算出来后的值却是 3 和 2 啊?
下面在看一组测试用例你就懂了:
char c4 = '\007';
//char c4_1 = '\400';
char c4_2 = '\377';
char c4_3 = '\0377';
char c4_4 = '\03a7';
char c4_4 = '\a07';
老规矩,猜一猜,输出结果是什么?
……
……
……
是不是还是有点懵啊,别急,再看一张图
下面揭晓谜题,其实 \ddd 最多只支持三位数字,并且三位数字也不是任意的,一旦大于等于八进制数 '/400 '(十进制256=8进制400)就超过了ascall码的范围,编译器就会报错。另外大于三位,或者遇到非八进制数字时则转换结束,直接取末尾数字。所以现在再回头去看看是不是发现很简单吧。
以免我的表述不够准确,在举个小栗子:
- char ch = '\062' ch等于字符 ‘2‘ ,十进制ascall码值为50,
该式把十进制的ascall对应值的字符赋值给ch 等同于ch = '2'; 或ch=50;
- char ch = '\0012' ch等于字符 '2' ,十进制ascall码值为50,
过长,进行截断。该式截取最后一个2,以字符'2'的形式 赋值给ch 等同于ch = '2'; 或ch=50;
- char ch = '\009' ch等于字符 '9' ,十进制ascall码值为57,
该式把十进制的ascall对应值的字符赋值给ch 等同于ch = '9'; 或ch=57;
- char ch = '\0009' ch等于字符 '9' ,十进制ascall码值为57,
过长,进行截断。该式截取最后的9 ,以字符'9'的形式赋值给ch 等同于ch = '9'; 或ch=57;
总结:
使用 '\ddd' 方法赋值实际上是将八进制数字通过转义字符 '\' 赋值为ascii表中对应的字符。
char ch = '\60'; char ch = 48; char ch = '0'; 这三个语句是一样的效果。
只不过第一种是通过八进制的方式,第二种是通过10进制的方式,三种是通过字符的方式。
ascii表:
另外需要注意的是,使用字符赋值的时候,单引号‘’通常只写一个字符。因为char类型只占一个字节,如果写入字符过多,也只会取其中一个字符。
如:char ch = 'ABC'; 最终ch的值为'C'。
仅测试在我本地计算机,和Linux服务器都将此语句执行后,ch保存为'C'。由此猜测它们都是以小端的方式存储数据。
何谓小端:如对于一个12345的整数,左边的1是‘万’位也就是我们所说的高位,而个为的5就是低位。
小端顾名思义就是先存储小的那一端。如对于12345我们存储的时候 54321 这样存储。大端存储方式自然相反。
而,对于计算机来说,每8位二进制为一字节,也就是2个16进制数,而我们使用小端存储 ch 时就做了这样的事。
并且,由于ch是char类型,只能容纳一个字节的数据,因此ch最终的取值为十六进制数 0x43,也就是字符 'C'。
同样的,对于int类型也是一样的存储方式。
'\ddd'转义字符与八进制转换的更多相关文章
- 含html转义字符编码(四)转换--python
在抓取下来的网页源码显示的是如下的内容,而不是可读性的汉字 (当然,如果是在Web页面上展示,则实体会自动被浏览器转为原字符,正常显示) 经查资料后得知, 在网页中以四开头的是HTML实体,具体什么是 ...
- Python如何把八进制转换成ASCII码
做题途中拿到一串八进制字符串 0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 010 ...
- char的越界赋值即其原理剖析
思考: int ch = 'A'; int ch1 = 65; int ch2 = 321; printf("%c %c %c\n", ch, ch1, ch2);的输出结果是什么 ...
- 我的Java开发学习之旅------>二进制、八进制、十进制、十六进制之间转换
一. 十进制与二进制之间的转换 (1) 十进制转换为二进制,分为整数部分和小数部分 ① 整数部分 方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权 ...
- Android,使用Json发送数据中,使用的Java转义字符 KanKan原创
kankan原创 与php后台发送数据的时候.要求用到这样的格式. private void sendJson(){ //初始化自己定义的handler CashHandler handler = n ...
- C\C++的转义字符
C\C++的转义字符 所有的ASCII码都可以用"\"加数字(一般是8进制数字)来表示.而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符, ...
- 关于java的转义字符
关于java的转义字符 我们都知道 String s="ad,dfjdlfs,df,s,dfl"; 执行 String re[]=s.split(&qu ...
- C语言的转义字符
原文地址:http://blog.163.com/sunshine_linting/blog/static/44893323201181325818165/ 在字符集中,有一类字符具有这样的特性:当从 ...
- [c/c++] programming之路(3)、转义字符及内存
一.转义字符 #include<stdio.h> void main(){ printf("hello \nworld\a");// \n换行 \a机器响一声 getc ...
随机推荐
- syntax error: unexpected end of file完美解决方案
用shell编写的一个脚本,执行的时候报错:syntax error: unexpected end of file! 发生这种报错有两种原因: 第一种: 如果你是用 windows 系统编写的脚本, ...
- PostgreSQL 的字段类型和表操作笔记
字段类型 数值类型 Name Storage Size Description Range smallint 2 bytes small-range integer -32768 to +32767 ...
- Ubutun:镜像网站
中科大镜像站(地址:安徽):http://mirrors.ustc.edu.cn清华大学镜像站:http://mirrors.tuna.tsinghua.edu.cn浙江大学镜像站:http://mi ...
- k8s 中 nfs作为存储的三种方式
1.安装nfs服务.直接给命令 yum install nfs-utils vim /etc/exports /data/k8s/ 172.16.1.0/24(sync,rw,no_root_squa ...
- deepin 字符集安装
deepin字符集安装 编辑 目录介绍 /usr/share/i18n/charmaps 这个目录下存放了该Linux操作系统可用字符集的安装包,如果你的操作系统上没有安装某个字符集可以到这个目录下寻 ...
- hive从入门到放弃(一)——初识hive
之前更完了<Kafka从入门到放弃>系列文章,本人决定开新坑--hive从入门到放弃,今天先认识一下hive. 没看过 Kafka 系列的朋友可以点此传送阅读: <Kafka从入门到 ...
- Linux下面怎么安装PHP扩展?
一般开发环境都是在windows上, 安装扩展也很容易, 直接把下载的.dll文件扔到ext下面, 改一下php.ini文件. 完事了. linux上有两种安装方法 1.编译安装 //下载文件 #wg ...
- Spring Bean生命周期,好像人的一生。。
大家好,我是老三,上节我们手撸了一个简单的IOC容器五分钟,手撸一个Spring容器!,这节我们来看一看Spring中Bean的生命周期,我发现,和人的一生真的很像. 简单说说IoC和Bean IoC ...
- 面试官:Redis集群有哪些方式,Leader选举又是什么原理呢?
哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 作为一名Java程序员,Redi ...
- G1垃圾回收器在并发场景调优
一.序言 目前企业级主流使用的Java版本是8,垃圾回收器支持手动修改为G1,G1垃圾回收器是Java 11的默认设置,因此G1垃圾回收器可以用很长时间,现阶段垃圾回收器优化意味着针对G1垃圾回收器优 ...