今天的手记内容是二进制,八进制,十六进制,原码,反码,补码(以上了解一下就好,但二进制还是要懂,这部分初高中都有学,我只是把一些有意思的讲讲,下面关于怎么换成十进制和其他之间的转换,大家就自己看看吧)。
在此声明本手记尽量日更(激励自己一下),更新到C Primer Plus最后的内容,一些头文件的介绍。目标是最后能够读懂一部分头文件。更新完从头一起学后会更新linux C。
关于十进制转二进制,采用除2取余法,十进制转其他进制的直接方法,不建议使用,一般都使用二进制和十进制作为进制转换的桥梁。
ok,先来讲二进制数。
特点:
(1)只有0和1两个不同的数字符号;
(2)逢2进位1。
这些进制之间本身并没有什么差别下面这段文字大概表述了数字的一种属性,而在不同进制中,这种属性没有什么差别。
这种属性叫做权。以下内容引用于我的课本:
对有进位计数制描述的数来讲,一个数字符号在该数的不同的数位具有不同的权(也称权值或基值),因此所表现的值是不一样的。二进制数也是如此,二进制数中不同的数位所具有的权值如下表所示。
对于十进制,八进制,十六进制,这个权值的概念都是一样的,但权值的这个概念就仿佛十进制是进制的中心一样。从其他进制转到十进制挺简单的但从十进制转到其他进制就很难受。
就比如:
就像这样的转换,我们看到权值是用2的幂表现的,然后,幂的值是用十进制数表示的。有没有大佬能给我讲讲怎么将权值的概念反过来呢?
这个对于八进制,十六进制都一样,换成十进制就把2换成8和16就好了。
快速走到八进制
八进制数是由0到7组成的数字串。八进制数具有如下两个基本特点:
1、只有0到7八个不同的数字符号;
2、逢8进位1。
值得一提的有两点。
其一,C语言中使用加前导零的方式来表示一个数是八进制数。
例如,0136表示八进制数(136)8。
其二,二进制和八进制之间的转换十分有趣。我们好像可以从中再次窥见数字的趣味。下面详细讲讲:
八进制整数转换为二进制整数的方法十分简单,只需要记住3个分一组就好了。不多说,直接贴链接都能看得懂。
二进制如何转换成八进制,八进制如何转成二进制
为什么是3个一组呢?因为8等于2的3次方(类比于100是10的二次方就能明白)。
下面十六进制。十六进制大概是程序员用的比较多的吧,比二进制八进制方便。
特点:
1、只有0到9以及A,B,C,D,E,F十六个不同的数字符号组成(字母也可以小写);
2、逢16进位1。
值得一提的同样两点:
其一,在C语言中,通过加前导0X或0x的方式来表示一个数是十六进制数。例如,0x2d5b表示的是十六进制数(2d5b)16,有时候也使用后缀H表示16进制数,如:2d5bH表示(2d5b)16。
其二,和八进制其二差不多了。直接上链接。
二进制数与十六进制数之间如何互相转换
道理吗。。。2的4次方等于16。
最后上一张图,我们结束这个内容。记住这个图,熟悉一下内容可以让你快速转换进制。
下面的关于原码,反码,补码的问题,实际上是在讲计算机内储存数据的方式。这里作者不想多讲,直接上链接。
深入理解机器码(原码,反码,补码)和算术溢出
原码, 反码, 补码 详解
不想详细讲因为这个东西对你实际编程没有什么影响,只要知道二进制就好了,放在这里是因为这部分内容和计算机系的太多课都有关,似乎没有理由忽视。
如果你是一个计算机系的学生,我相信这部分的知识应当是挺重要的,但如果你只是学习C语言编程,大可略过此内容。
这篇(四)可以说是没什么干货的一篇了,但这些废话十分重要,后面的指针部分涉及到内存,和计算机内数据的储存方式关系密切,是后面的基础,希望大家重视,内容不复杂,但是重要。
(五)中会把关键字,数据类型和运算符讲一下,附带着会写一下内存的概念。(今天时间不够了所以没有写数据类型的内容)