学习笔记04

浮点型(实型):float,double
用来存储小数数值

  • 单精度浮点型float
  • 双精度浮点型double
  • double比float更精确
#include <stdio.h>
int main()
{
	float a =3.14f;
	double b =3.14;
	printf("%,2f\n",a);
	printf("%f\n",b);
	return 0;
	}

由于浮点型变量是由有限的存储单元构成,因此只能提供有限的有效数字。在有效位以外的数字将被舍去,这样可能会产生一些误差。

不以f为结尾的常量是double 类型,以f为结尾的常量是float类型
*浮点型数据 存储在内存中的格式分为符号位 指数位 小数位

//sizeof字节大小
printf("%d\n",sizeof(float)");
printf("%d\n,sizeof(double)");
%p:以十六进制形式显示数据内存地址
占位符 表示输出一个变量对应的内存地址编号(无符号十六进制整型数)
科学计数法
a=3.2e3f; 3.2*1000=3200,e可以写E
printf(“a1=%f\n”,a);

#include<stdio.h>
int main(void)
{
	float b =3.2e3f;
	printf("%f\n",b);
	return 0;
	}
#include <stdio.h>
int main(void)
{
	float a =0.123456;
	printf("%e\n",a);
	return 0;
	}

进制
二进制:c语言不能直接写二进制
它的基数是2,进位规则是“逢二进一”,借位规则是”借一当二”。


十进制转化为二进制(除二反序余法)
10➗2=5…0
5➗2=2…1
2➗2=1…0
1➗2=0…1

十进制10转成二进制1010
二进制转成十进制(权值法)
1 0 1 0
02^0=0
1
2^1=2
02^2=0
1
2^3=8
0+2+0+8=10
将一个二进制数依次从末尾开始乘2的n次幂,n从0开始。
十进制转成八进制(除八反序取余法)
123➗8=15…3
15➗8=1…7
1➗8=0…1
得173
4567➗8=570…7
570➗8=71…2
71➗8=8…7
8➗8=1…0
1➗8=0…1
十进制4567转成八进制是10727
八进制转成十进制(权值法)
1 7 3
38^0=3
7
8^1=56
1*8^2=64
3+56+64=123

1 0 7 2 7
78^0=7
2
8^1=16
78^2=448
0
8^3=0
1*8^4=4096
7+16+448+4096=4567
十进制和十六进制(除十六反序取余法)
123➗16=7…11
7➗11=0…7
十进制123转成16进制是7b

4567➗16=285…7
285➗16=17…13 d
17➗16=1…1
1➗16=0…1
十进制4567转成十六进制11d7

十六进制转换成十进制(权值法)
7 11
1116^0=11
7
16^1=112
11+112=123

1 1 13 7
716^0=7
13
16^1=208
116^2=256
1
16^3=4096
7+208+256+4096=4567


``二进制 八进制 十六进制
十进制 二进制 八进制 十六进制
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 18 108


十进制为2的几次方,则二进制中就有多少个零

211=128+64+16+2+1

得11010011
八四二一法则


二进制转八进制三位一格
1 1
10 2
100 4
1000 10
10000 20

例如:10011010 233
八进制转二进制与之相反
不够三位用零补位
534235172345
101 011 100 010 011 101 001 111 010 011 100 101
二进制与十六进制(四位一格)同上

例题:将八进制的567转为十六进制
567(先转为二进制)101 110 111
(再转为十六进制)1 0111 0111即为177
例题:将十六进制的3F2D9B73C转为八进制
(先转为二进制)0011 1111 0010 1101 1001 1011 0111 0011 1100
(再转为八进制)176266333474
八进制:以数字零为开头
十六进制:以0x为开头

小数存储方式
十进制的小数转换成二进制:小数部分和2相乘,取整数,不足1取0,每次相乘都是小数部分,顺序看取整后的数就是转化后的结果。
0.4322=0.846 取整为0
0.846
2=1.728 取整为1
1.728*2=1.456 取整为1
结果为011;
0.432只有3位,故只需3位
乘的时候只乘小数部分
在c语言中的进制表现形式有3种,分别是8,10,16,进制
sizeof用于计算字节大小
在这里插入图片描述
计算机内存数值存储方式
原码:原始二进制码,本身转换方便,但不便于加减运算。

  • 最高位作为符号位,0代表正,1代表负
  • 其他数值部分就是数值本身绝对值本身绝对值的二进制数
  • 负数的原代码是在其绝对值的基础上,最高位变为1
    例如:十进制数 原码
    +15 0000 1111
    -15 1000 1111
    char ch =10;
    0000 1010

反码:* 对于正数,反码与原码相同,但对于负数来说,符号位不变,其他部分取反(1变0,0变1),也不方便.
原码:1000 1010 0000 1010

反码:0111 0101 0000 1010

补码
在计算机系统中,一律采用补码来存储

特点

  • 对正数来说,原码,反码,补码相同;
  • 对负数来说,其补码为它的反码加一
    补码 :0111 0110 0000 1010

主要原因:

  • 统一了0的编码
  • 将符号位和其他位统一处理
  • 将减法运算转变成加法运算
  • 两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃
    例如:76-32
    76:原码反码补码:0100 1100
    -32:原码:1010 0000
    反码:1101 1111
    补码:1110 0000
    补码相加:1 0010 1100
    补码:0010 1100
    反码:0010 1100
    原码:0010 1100
    得:44

76-82
76同上,-82:
原码:1010 1010
反码:1101 0101
补码:1101 0110
补码相加:1111 1010
反码:1111 1001
原码:1000 0110
得:-6

8bit数据中最大存储值位???
0111 1111(127)方法:+1法:1000 0000 -1 =2^7-1
最小值:1111 1111(-127)
数据存储时将-0对应的区间值设为最小值 -2^7
8bit数据区间位(-128~127);
有符号的字符型取值范围(-128~127)
有符号的int 32bit -2的31次幂~2的31次幂-1
(-2147483648~2147483647)
有符号的long long 64bit -2的63次幂~2的63次幂-1

无符号
数据存储在计算机中不存在符号位
unsigned char
1111 1111 2^8-1
0000 0000 0
unsigned char 0~255

unsigned int 0~2^32-1
(0~4294967295)

short 2字节 -32768~32767(-2的15次幂到2的15次幂-1)
unsigned short 2字节 0~2^16-1

long 4字节 0 到4294967295(0~2^32-1);

数值溢出
char ch=127;
ch=ch+2;
127原码补码:0111 1111
2原码补码:0000 0010
相加补码:1000 0001
反码:1000 0000
原码:1111 1111=-127
符号位溢出会导致数的正负发生变化,但最高位的溢出会导致最高位丢失
例题:short a=0x7fff+2
三码一致:
0111 1111 1111 1111
2:三码一致:0000 0000 0000 0010
相加得1000 0000 0000 0001
反码:1000 0000 0000 0000
原码:1111 1111 1111 1111(-32767)

例题:unsigned short a=0xffff+5
补码:1111 1111 1111 1111
补码:0000 0000 0000 0101
相加得:1 0000 0000 0000 0100(得4)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值