版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言第7天【理解】什么是进制?是一种计数的方式,数值的表示形式半斤八量来源宋·释普济《五灯会元》卷十一:“问:‘来时无物去时空,二路俱迷,如何得不迷去?’师曰:‘秤头半斤,秤尾八两。’”宋·释惟白《建中靖国续灯录》:“踏着秤锤硬似铁,八两元来是半斤。”示例众将看他两个本事,都是半斤八两的,打扮也差不多。【理解】数一下方块的个数汉字:十二 十进制:12
二进制:1100
八进制:14
16进制:
C多种进制:十进制、二进制、八进制、十六进制。也就是说,同一个整数,我们至少有4种表示方式软件开发,肯定要了解这个【理解】计算机中的进制进制:一种计数方式十进制:由0、1、2….9十个基本数字组成;运算规则是“逢十进一”二进制特点:由0、1两个基本数字组成;运算规则是“逢二进一”书写形式:需要以0b或者0B开头,比如0b101八进制特点:由0~7八个基本数字组成;运算规则是“逢八进一”书写形式:在前面加个0,比如045十六进制特点:由0~9和A~F组成,A~F分别表示10~15;运算规则是“逢十六进一”书写形式:在前面加个0x或者0X,比如0x45【理解】不同进制printf的格式符Mac
中计算器的使用可以使用printf来输出【理解】习题1.判断下列数字是否合理00011
0x001
0x7h4
10.98
0986
.089-109
+178
0b325
0b0010
0xffdc
96f
96.0f
96.oF
-.003【了解】进制转换的三要素进制转换的3个基本要素:数码,数位、基数数码:用不同的数字符号来表示一种数制的数值,这些数字符号称为”数码”数位:数位是指数码在一个数中所处的位置基数:每个数位上所能使用的数码的个数(二进制取值0、1基数为2,十进制取值0-9基数为10)权:某数制每一位所具有的值称为”权”如:01100100权重数码
数码数位【理解】10进制转2进制方法:除2取余倒叙排如97
10进制转2进制【理解】二进制转10进制所有二进制位上的权重之和【了解】10进制转8进制除8取余倒序排如:10进制100
转8进制【了解】8进制--->10进制所有8进制位上的权重之和【了解】2进制--->8进制三个二进制位转换为一个8进制位【了解】8进制转2进制一个8进制位转换为三个2进制位【理解】2进制--->16进制4个2进制位转换为1个16进制位【理解】16进制转2进制一个16进制位转换为四个2进制位【了解】机器数与真值机器数一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1.比如,十进制中的数+3,计算机字长为8位,转换成二进制就是00000011。如果是-3,就是10000011
。那么,这里的00000011
和10000011
就是机器数。真值因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数10000011,其最高位1代表负,其真正数值是-3
而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。例:0000
0001的真值
=
=
+1,1000
0001的真值
=
–000
0001
=
–1【了解】原码、反码、补码的基本概念.在探求为何机器要使用补码之前,让我们先了解原码,反码和补码的概念.对于一个数,计算机要使用一定的编码方式进行存储.原码,反码,补码是机器存储一个具体数字的编码方式.原码,反码,补码是计算机原理的术语。说白了就是为了理解计算机2进制用的。对于C/C++来说,是和数据类型有关的。数据在计算机内部是以补码的形式储存的对于正数:反码==补码==原码。对于负数:反码==除符号位以外的各位取反。补码=反码+1)原码:原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值反码:正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反.补码:正数的补码就是其本身,负数是反码+1【了解】已知原码,求补码例:已知某数X的原码为10110100B,试求X的补码和反码。解:由[X]原=10110100B知,X为负数。求其反码时,符号位不变,数值部分按位求反;求其补码时,再在其反码的末位加1。1
0
1
1
0
1
0
0
原码1
1
0
0
1
0
1
1
反码,符号位不变,数值位取反1
+11
1
0
0
1
1
0
0
补码故:[X]补=11001100B,[X]反=11001011B。【了解】已知补码,求原码。分析:按照求负数补码的逆过程,数值部分应是最低位减1,然后取反。但是对二进制数来说,先减1后取反和先取反后加1得到的结果是一样的,故仍可采用取反加1方法。例:已知某数X的补码11101110B,试求其原码。解:由[X]补=11101110B知,X为负数。求其原码表示时,符号位不变,数值部分按位求反,再在末位加1。1
1
1
0
1
1
1
0补码1
0
0
1
0
0
0
1
符号位不变,数值位取反1
+11
0
0
1
0
0
1
0
原码【了解】为什么要引入反码和补码?在开始深入学习前,我的学习建议是先"死记硬背"上面的原码,反码和补码的表示方式以及计算方法.现在我们知道了计算机可以有三种编码方式表示一个数.对于正数因为三种编码方式的结果都相同:所以不需要过多解释.但是对于负数:可见原码,反码和补码是完全不同的.既然原码才是被人脑直接识别并用于计算表示方式,为何还会有反码和补码呢?首先,因为人脑可以知道第一位是符号位,在计算的时候我们会根据符号位,选择对真值区域的加减.(真值的概念在本文最开头).但是对于计算机,加减乘数已经是最基础的运算,要设计的尽量简单.计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂!于是人们想出了将符号位也参与运算的方法.我们知道,根据运算法则减去一个正数等于加上一个负数,即:1-1=1+(-1)=0,所以机器可以只有加法而没有减法,这样计算机运算的设计就更简单了.【了解】补码的再深入计算十进制的表达式:1-1=0如果用原码表示,让符号位也参与计算,显然对于减法来说,结果是不正确的.这也就是为何计算机内部不使用原码表示一个数.为了解决原码做减法的问题,出现了反码:计算十进制的表达式:1-1=01-1=1+(-1)=[0000
0001]原+[1000
0001]原
=[0000
0001]反+[1111
1110]反=[1111
1111]反
=[1000
0000]原(1111
1111,符号位不变,其他为逐位取反)=-0发现用反码计算减法,结果的真值部分是正确的.而唯一的问题其实就出现在"0"这个特殊的数值上.虽然人们理解上+0和-0是一样的,但是0带符号是没有任何意义的.而且会有[0000
0000]原和[1000
0000]原两个编码表示0.于是补码的出现,解决了0的符号以及两个编码的问题:1-1=1+(-1)=[0000
0001]原+[1000
0001]原=[0000
0001]补+[1111
1111]补
=[0000
0000]补=[0000
0000]原这样0用[0000
0000]表示,而以前出现问题的-0则不存在了.而且可以用[1000
0000]表示-128:(-1)+(-127)=[1000
0001]原+[1111
1111]原=[1111
1111]补+[1000
0001]补=[1000
0000]补-1-127的结果应该是-128,
在用补码运算的结果中,[1000
0000]补就是-128.
但是注意因为实际上是使用以前的-0
的补码来表示-128,
所以-128并没有原码和反码表示.(对-128的补码表示[1000
0000]补算出来的原码是
[0000
0000]
原,这是不正确的)【了解】举例1
0000
0000
0000
0000
0000
0000
0000
00010
0000
0000
0000
0000
0000
0000
0000
0000-1
1111
1111
1111
1111
1111
1111
1111
1111正整数取反+1就是对应负数单字节的表示的最小的负数(负的最狠的数)是多少?[10000000]补=[10000000]反+1
=11111111+1==(1)00000000
=00000000(最高位溢出了,符号位变成了0)n位补码能表示的范围是-2^(n-1)到2^(n-1)-1int
的取值范围是什么?【理解】位运算位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言□ 供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型&
按位与只有对应的两个二进位均为1时,结果位才为1,否则为0|
按位或只要对应的二个二进位有一个为1时,结果位就为1,否则为0^
按位异或当对应的二进位相异(不相同)时,结果为1,否则为0~
取反各二进位进行取反(0变1,1变0)<<左移各二进位全部左移n位,高位丢弃,低位补0>>右移各二进位全部右移n位,保持符号位不变【理解】&
按位与功能只有对应的两个二进位均为1时,结果位才为1,否则为0。举例:比如9&5,其实就是1001&101=1,因此9&5=1规律一个二进制位与1相&就保持原位,与0相&就为0任何数和1进行&操作,得到这个数的最低位【理解】|
按位或功能只要对应的二个二进位有一个为1时,结果位就为1,否则为0。举例:比如9|5,其实就是1001|101=1101,因此9|5=13【理解】^
按位异或功能当对应的二进位相异(不相同)时,结果为1,否则为0。2>举例:比如9^5,其实就是1001^101=1100,因此9^5=123>
规律相同整数相^的结果是0。比如5^5=00^任意数结果还是这个数多个整数相^的结果跟顺序无关。比如5^6^7=5^7^6因此得出结论:a^b^a=b~
取反对整数a的各二进位进行取反,符号位也取反(0变1,1变0)【理解】<<左移a<<n把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性【理解】>>右移把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方为正数时,符号位为0,最高位补0为负数时,符号位为1,最高位是补0或是补1
取决于编译系统的规定【理解】面试题判断一个数的奇偶性,如果是奇数则打印“奇数”,否则打印“偶数”int
rs
=
num&1面试题使用位运算实现交换两个数的值a
=
a^b;b
=
b^a;a=
a^b;【理解】字节和地址字节和地址为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”。内存以“字节为单位”,一个字节是8个二进制位里面的每个小框框就代表着内存中的一个字节,白色数字就是每个字节的地址。可以发现,内存中相邻字节的地址是连续的【理解】变量的存储一个变量所占用的存储空间,不仅跟变量类型有关,而且还跟编译器环境有关系。同一种类型的变量,在不同编译器环境下所占用的存储空间又是不一样的下面的表格描述了在不同编译器环境下的存储空间占用情况变量存储单元的第一个字节的地址就是该变量的地址任何变量在内存中都是以二进制的形式存储。一个负数的二进制形式,其实就是对它的正数的二进制形式进行取反后再+1。(取反的意思就是0变1、1变0)【理解】变量的存储变量所占用字节数跟类型有关,也跟编译器环境有关变量实例int
b
=
10;int
a
=
134;内存由大到小寻址(先分配地址大的内存,然后分配地址小的内存)只存储二进制形式每个变量都有地址:第一个字节的地址就是变量的地址低位保存在低地址字节上,高位保存在高地址字节上【理解】取值范围不同数据类型所占的存储空间是不一样的,字节长度不一样,包含的二进制位数就不一样,能表示的数据范围也就不一样如果赋值的时候超出了变量的取值范围,那么将损失精度,得到“垃圾数据”(“垃圾数据”就是指并非我们想要的数据)【理解】类型说明符概述C语言提供了以下4种说明符,4个都属于关键字:short
短型long
长型long
long
超长型signed
有符号型unsigned
无符号型这些说明符一般就是用来修饰int类型的,所以在使用时可以省略int【理解】改变长度修饰符short和long,long
long可以提供不同长度的整型数,也就是可以改变整型数的取值范围。在64bit编译器环境下,int占用4个字节(32bit),取值范围是-231~231-1;short占用2个字节(16bit),取值范围是-215~215-1;long占用8个字节(64bit),取值范围是-263~263-1long
long占用8个字节(64bit),取值范围是-263~263-12>总结一下:在64位编译器环境下,short占2个字节(16位),int占4个字节
(32位),long占8个字节(64位)。因此,如果使用的整数不是很大的话,可以使用short代替int,这样的话,更节省内存开销。short
int等价于short,long
int等价于long,long
long
int等价于long
long【了解】改变长度修饰符规则世界上的编译器林林总总,不同编译器环境下,int、short、long的取值范围和占用的长度又是不一样的。比如在16bit编译器环境下,long只占用4个字节。不过幸运的是,ANSI\ISO制定了以下规则:short跟int至少为16位(2字节)long至少为32位(4字节)short的长度不能大于int,int的长度不能大于long
long的长度不能大于longlongchar一定为为8位(1字节),毕竟char是我们编程能用的最小数据类型【理解】改变符号的修饰符:signed和unsigned首先要明确的:signed
int等价于signed,unsigned
int等价于unsigned2>signed和unsigned的区别就是它们的最高位是否要当做符号位,并不会像short和long那样改变数据的长度,即所占的字节数。signed:表示有符号,也就是说最高位要当做符号位,所以包括正数、负数和0。其实int的最高位本来就是符号位,已经包括了正负数和0了,因此signed和int是一样的,signed等价于signed
int,也等价于int。signed的取值范围是-231
~
231
-1
unsigned:表示无符号,也就是说最高位并不当做符号位,所以不包括负数。在64bit编译器环境下面,int占用4个字节(32bit),因此unsigned的取值范围是:0000
0000
0000
0000
0000
0000
0000
0000
~
1111
1111
1111
1111
1111
1111
1111
1111,也就是0
~
232
–1改变符号的修饰符可以修饰该变长度的修饰符,如:unsigned
shortunsigned
long,unsigned
long
long【掌握】char类型char是C语言中比较灵活的一种数据类型,称为“字符型”。它是用来存储字符的,因此可以将一个字符
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 5078-2026单向引出的电容器和电阻器所需空间的测定方法
- 北京病人护理康复护理
- 护理实验中的皮肤护理技能
- 口腔科护理与牙齿保健
- 护理直播中的法律风险防范
- 同济内科护理科研方法
- 护理不良事件根因分析
- 护理实验结果解读
- 护理技术操作培训:静脉注射技巧
- 护理技术操作培训:皮下注射技术
- 深圳龙岗区产服集团招聘笔试题库2026
- 2026年上海市各区高三语文一模试题汇编之文言文一(教师版)
- 借用收款账户协议书
- 市政供冷工程施工方案
- 2025年压缩机操作工(中级)职业技能鉴定《理论知识》真题卷(附解析)
- 国家基本药物知识培训
- 2026年陕西机电职业技术学院单招职业技能测试必刷测试卷及答案1套
- 九江市事业单位招聘考试真题2024
- 教育学原理课件全套课件
- 产权交易平台设计与运行管理方案
- 混凝土路面换板施工技术方案详解
评论
0/150
提交评论