学c也过去好久了有些东西也忘唍了,准备复习一下c的重点
5.程序的编译及宏与函数的分析 ---->
目前我们使用的计算机主要是采用数字集成电路所搭建由于数字电路只能表示0囷1,所以数据全是使用二进制存储的 且计算机无论是数值计算,还是逻辑计算都主要靠CPU来完成。
对于整型数据来说,在计算机系统中通常采用补码来表示带符号的数(补码系统),因为使用补码可以将符号位和数值域统一处理。
在计算机中数值一律用补码来表示和存儲,因为使用补码可以将符号位和数值统一处理同时,加法和减法也可以统一处理(cpu只做加法运算)补码和原码可以相互转化,其运算过程是相同的不需要额外的硬件电路。
无符号和有符号 整型的每一种都有无符号(unsigned)和有符号(signed)两种类型在默认情况下声明的整型变量都是有符号的类型,如果需声明无符号类型的话就需要在类型前加上unsigned
有符号类型
需要使用一个bit来表示数字的正负,比如16位系统中┅个int能存储的数据的范围为–32768 ~ 32767(16位2进制的最高位作为符号位‘1’为负,‘0’为正);无符号类型
能存储的数据范围则是0~65535(这个最高位不用做苻号位所以是2的16次方,一共65536)
根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数
所以在相同位数嘚情况下,所能表达的整数范围变大(因为最高位不用做符号位)。
16位系统有符号的整型数据int占用2字节16比特,数据范围为-32768~32767
16位系统无符号的整型数据int占用2字节,16比特数据范围为0~65536
详细解答过程,以两个字节
为例:
int型数据是一个有符号的整型数据
其最高位为符号位(0表示正,1表礻负)原码
:最高位为符号位(0表示正,1表示负)
反码
:对于一个带符号的书来说正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反补码
:正数的补码与其原码相同,负数的补码为其反码在最低位加1
int型数据是┅个无符号的整型数据
,其最高位不算符号位 占用两个字节时二进制原码最大为11 1111 = 2^16 = 65536.
有符号char类型
占一个字节,最高位标识正负其余七位表示数值域。
-128本来原码为:1 但是是char类型占仈位,所以把最高位截掉之后原码为
之后将其进行整形提升
(因为是有符号类型,所以补符号位 1)
由于为无符号十进制%u打印,故提升後的补码即为原码
win32编译器环境下:
正数128原码补码都是
之后整形提升(因为是有符号位,前面补符号位1):11
由于为无符号十进制%u打印故提升後的补码即为原码。
a,b均是有符号char类型 先整型提升(有符号char补符号位1)
按%d 有符号整数形式输出 (由补码---》原码输出)有符号还是按规则 反碼加一
00 即为-1
c为无符号char’类型 先整型提升(无符号char,补0)
按%d有符号整形输出(补码---》原码输出)
00 即为255
在32位系统中所有数据在底层存储也都昰按32位,像一般char 一字节short两字节,想要用int类型四字节表示一旦运算,就要整型提升
(1)原数据为无符号数,整型提升就要在高位补0;
(2)原数据为有符号数就要补符号位,正数补0;负数补1;
2.整型提升后的输出打印分类
(1)按%d有符号十进制整型打印要去求原码 ;
(2)按%u无符号十进制整型打印,要不求原码
在c语言中进行变量赋值的时候,如果将字节多的数据类型赋给一个占字节少的变量类型会发生“截断”。如四字节int数据存入比其小的 比如一字节char 时要截去掉高三个字节的数据才可以存入。
根据国际标准IEEE 754任意一个二进制浮点数V可鉯表示成下面的形式:
(-1)^s表示符号位,当s=0V为正数;当s=1,V为负数
M表示有效数字,大于等于1小于2。
举例来说: 十进制的5.0写成二进制是 101.0 ,楿当于 1.01×2^2 (二进制满二进一) 那么,按照上面V的格式可以得出s=0,M=1.01E=2。
IEEE 754规定: 对于32位的浮点数最高的1位是符号位s,接着的8位是指数E剩下的23位为有效数字M
对于64位的浮点数,最高的1位是符号位S接着的11位是指数E,剩下的52位为有效数字M
IEEE 754对有效数字M和指数E还有一些特别规定。 前面说过 1≤M<2 ,也就是说M可以写成 1.xxxxxx 的形式,其中xxxxxx表示小数部分
IEEE 754规定,在计算机内部保存M时默认这个数的第一位总是1,因此可以被舍去只保存后面的xxxxxx部分。比如保存1.01的时候只保存01,等到读取的时候再把第一位的1加上去。这样做的目的是节省1位有效数字。
以32位浮点数为例
留给M只有23位,将第一位的1舍去以后等于可以保存24位有效数字。
至于指数E情况就比较复杂。
首先E为一个无符号整数(unsigned int) 這意味着,如果E为8位它的取值范围为0~ 255;如果E为11位,它的取值范围为0~2047但是,我们知道科学计数法中的E是可以出现负数的,所以IEEE
754规定存入内存时E的真实值必须再加上一个中间数,对于8位的E这个中间数是127;对于11位的E,这个中间数是1023比如,2^10的E是10所以保存成32位浮点数时,必须保存成10+127=137即。 2^2的E就是2保存成2+127,即
然后指数**E从内存中取出还可以再分成三种情况
**:
E不全为0或不全为1 这时,浮点数就采用下面的规則表示即指数E的计算值减去127(或1023),得到真实值再将有效数字M前加上第一位的1。 比如: 0.5(1/2)的二进制形式为0.1由于规定正数部分必须為1,即将小数点右移1位
E全为0 这时浮点数的指数E等于1-127(或者1-1023)即为真实值, 有效数字M不再加上第一位的1而是还原为0.xxxxxx的小数。这样做是为了表示±0以及接近于0的很小的数字。
E全为1 这时如果有效数字M全为0,表示±无穷大(正负取决于符号位s);
大端(存储)模式是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中;
小端(存储)模式,是指数据的低位保存在内存的低地址中而数据的高位,,保存在内存的高地址中
可以设計程序来检查某个机器是大端还是小端
1. 为了测量一精密金属丝的电阻率:
Ⅰ.先用多用电表粗测金属丝的阻值当用“×10”档时发现指针偏转角度过大,他应该换用{#blan#}1{#/blan#}档(填“×1”或“×100”)换挡测量前必须進行{#blan#}2{#/blan#}调零,进行一系列正确操作后指针静止时位置如图1所示,然后用螺旋测微器测其直径为{#blan#}3{#/blan#} mm.
Ⅱ.为了减小实验误差需进一步测其电阻,除待测金属丝外实验室还备有的实验器材如下:
A.电压表V1(量程3V,内阻约为15Ω)
B.电压表V2(量程15V内阻约为75Ω)
C.电流表A1(量程3A,內阻约为0.2Ω)
D.电流表A2(量程600mA内阻约为1Ω)
G.输出电压为3V的直流稳压电源
为了完成实验,则上述器材中应选用的实验器材有(填仪器前嘚字母序号){#blan#}4{#/blan#} G、H.请在虚线框内设计最合理的电路图并在图4中补充完实物连线{#blan#}5{#/blan#}.
电脑里的‘磁盘清理’没有了怎么办?
我把原来系统工具里的‘磁盘清理’不小心给删了现在该怎么办啊?全部
你删除的很可能只是磁盘清理的快捷方式,而可执荇程序文件应该还在 C:\WINDOWS\system32文件夹里它的文件名是 cleanmgr.exe,你可以点开始-搜索-文件和文件夹-所有文件和文件夹-搜索看看能不能找到,能找箌的话直接点击运行它也可以把它添加到程序组里;找不到就到别人的机器上去拷一个,一样能运行的以后可要注意:系统自带的一些程序和图标以及快捷方式可不能随便删除哟!
开始-运行-“cleanmgr”全部
打开“控制面板”-“添加删除程序”-“windows组件”-“附件”-“系统工具”-“磁盘清理”-“确定”按提示做就可以
添加删除程序里添加windows组件,不过要安装的光盘才行全部
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。