学习内容
数值型
在C语言中,按被定义数据的性质,表达形式,占存储空间以及构造特点其数据类型分为
2. 不同的类型的差别就在于采用不同位数的二进制编码方式,占用不同的存储空间就会有不同的数值表示范围。
3. >在数学中整数是一个无限的集合,即整数的表示范围为负无穷到正无穷。可是在C语言中,C语言标准本身也并不限制各类型数据所占的存储字节数,但是在计算机中,所有数据的取值范围受限于机器所能表示的范围,不同的计算机软件对数据的存储有具体的规定
用于存放整型数据。根据数值的表示范围可以分为整型int、短整型short、长整型long三种。默认是有符号型的,即signed。可以根据需要,指定为无符号型,即unsigned。
当赋值的大小超过数据类型能够表示的范围时就发生数据溢出。比如,short num = 100000;
制定不同大小的数据类型,特别是制定表示范围小的类型,是考虑到某些系统需要节约内存,比如嵌入式。
不同的位数系统下,int能表示的大小不一样,32位中,int与long等价;32位以下的系统中,int与short等价,也就是嵌入式中。
在不考虑内存的情况下,或者表示很大的范围时,使用int。
在考虑正数的场合,使用unsigned。
在计算机中总是采用二进制补码的形式表示一个整型数据
- 这里整型是补码的形式,第一位是表示符号的,叫他符号位,着这图中分开两截表示两个字节,补码也就是1和0互换,再将结果加一
原码、反码与补码
补码是为了解决原码不能简易的实现有符号数的运算而产生的。正数的原码、反码与补码都与原码一样。负数的反码是原码最高位为1,其他位取反;补码是反码加1。
计算机中,数据一律采用补码表示。
比如:
-8
原码:1000 1000
反码:1111 0111
补码:1111 1000
补码的反码加1就是原码,或者补码减1的反码就是原码。
内存中fffc表示的是几
fffc的二进制码,就是某个数的补码:
1111 1111 1111 1100
根据补码求原码,反码加1
1000 0000 0000 0100
计算,8-3
8的原码和补码
0000 1000
-3的原码
1000 0011
-3的补码
1111 1101
那么,0000 1000 + 1111 1101
得到,0000 0101,这个数是正数,补码就是原码,也就是5
计算,3-8
3的原码和补码
0000 0011
-8的原码
1000 1000
-8的补码
1111 1000
3-8,0000 0011 + 1111 1000
得到,1111 1011
这个数的原码1000 0100,也就是-5
-
和求一个数的补码相反,减1取反>10001001-1=10001000,然后取反 符号位不变,11110111>在“闲扯原码、反码、补码”文件中,没有提到一个很重要的概念“模”。我在这里稍微介绍一下“模”的概念:
“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。例如:时钟的计量范围是0~11,模=12。
表示n位的计算机计量范围是0~2(n)-1,模=2(n)。
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法为加法运算。
例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:
一种是倒拨4小时,即:10-4=6
另一种是顺拨8小时:10+8=12+6=6
在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。
对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特性。共同的特点是两者相加等于模。
对于计算机,其概念和方法完全一样。n位计算机,设n=8, 所能表示的最大数是11111111,若再加1称为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系统的模为2^8。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机对数的处理上,就是补码。
另外两个概念
一的补码(one’s complement) 指的是正数=原码,负数=反码
而二的补码(two’s complement) 指的就是通常所指的补码。
小数补码求法:一种简单的方式,符号位保持1不变,数值位从右边数第一个1及其右边的0保持不变,左边按位取反。 -
单精度浮点型
十进制小数,必须带小数点。指数形式,e或者E之前必须有数字,指数必须为正数,比如12.3e3,123E3,1.23e4,1.2e-5。
实型常量,默认为double型,例如3.14是double型的;后面加f或F就是float型的,例如3.14f就是float型。
浮点型利用指数达到浮动小数点的效果,从而可以灵活地表达更大范围的实数。
//浮点型
int fudian()
{
printf("%f",1.23e-5);
printf