约翰·冯·诺依曼(JohnVonNouma,1903-1957),美藉匈牙利人
被称为计算机之父:2大贡献
二进制
计算机设备分类:运算器 控制器 存储器 输入设备 输出设备
数字是本质,进制只是不同表现方式
一个十六进制位,要用4个二进制数表示,(1)16 = (0001)2 前面补齐
二进制 逢 二进一
十进制 逢 十进一 dec
八进制 逢 八进一 oct 0数字 int i = 05;
十六进制 逢 十六进一 hex 0x数字 0X数字
int i = 0x5;int i = 0X5;
生活中:
七进制 七天进周
十二进制 十二月进年
二十四进制 二十四小时进日
六十进制 六十分钟进小时
六十秒钟进分钟
汇编里
1101B 二进制
1357O 八进制
2049D 十进制
3FB9H 十六进制
十进制(D) 二进制(B) 八进制(O) 十六进制(H)
0 0 0 0
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 (A)
11 1011 13 b (B)
12 1100 14 c (C)
13 1101 15 d (D)
14 1110 16 e (E)
15 1111 17 f (F)
16 10000 20 10
017 = 7 + 1*8 = 15
0x17 = 7 + 1*16 = 25
1234 = 4 + 1*10三次方 + 2*10二次方 + 3*10一次方
0x32c = c + 3*16二次方 + 2*16一次方 = 4354
最高幂数是位数-1
#include
int main(void)
{
int i = 0x32c;
printf("i = %d\n", i);
printf("i = %x\n", i);
printf("i = %o\n", i);
/*
printf的用法
%d 以十进制输出
%x 或 %X 以十六进制输出
%o 或 %O 以八进制输出
*/
return 0;
}
#include
int main(void)
{
int i = 1000;
print("%X\n", i) //3E8
printf("%#X\n",i) //OX3E8 %#X 推荐
return 0;
}
原码:
也叫符号绝对值
最高位0表示正 1表示负,其余二进制位是该数字的绝对值的二进制位
在计算机中,从未被使用!
反码
反码运行不便,也没有在计算机中应用
-----------------------------------------
移码
表示数值平移n位,n称为移码量
移码主要用于浮点数的阶码的存储
-----------------------------------------
补码
地址是内存单元编号从 0到4G-1
即 2的32次方-1 总线若是32位,则有32个0,1
主要解决整数的存储 int 4字节 32位个0,1
A 已知十进制求二进制
求正整数的二进制
除2取余,直到商为零,余数倒序排列
求负整数的二进制
先求出与该负数相对应的正整数的二进制代码,
然后,将所有位取反末尾加1,不够位数时,左边补一
4字节int -5 先求5的二进制
0000 0000 0000 0000 0000 0000 0000 0101 所有位取反,末尾加1
1111 1111 1111 1111 1111 1111 1111 1011 16进制:FFFFFFFB
2字节 short int(-3) 先求3的二进制
0000 0000 0000 0011 所有位取反,末尾加1
1111 1111 1111 1101 用十六进制表示: FFFD
求零的二进制
全是零
B 已知二进制求十进制
如果首位是0,则表明是正整数,
按普通方法来求
如果首位是1,则表明是负整数,
将所有位取反末尾加1,所得数字就是该负数的绝对值
习题:FFFFFFF5 已知二进制 求其代表的整数是多少?
1111 1111 1111 1111 1111 1111 1111 0101
由于最高位是1,所以最终是负数,先对其所有取反
0000 0000 0000 0000 0000 0000 0000 1010 末尾加1后
0000 0000 0000 0000 0000 0000 0000 1011 该值为11 所以最终结果:-11
如果全是零,则对应的十进制数字就是零
C 二进制 到 十六进制
4位一段 从右到左 分别转化 不够左边初零
(0010 1110)2 -- (2E)16
D 十六进制 到 二进制
一位转化成4位,不够左边补0
(1)16-- (0000 0000 0000 0000 0000 0000 0000 0001)2
E 二进制 转到 八进制
从右往左,三位一段 不够被0
F 八进制 与 十六进制 不能直接转化。通过中间进制。
进制总结:
进制属于什么知识点,许多人爱不懂装懂。学习好它有利于将来学习底层如汇编等知识,但要往高级语言发展则不需要掌握,另外学好它对后面位运算等有帮助。
学习后应掌握:
在在VC++6.0中一个int类型变量所能存储的数字的范围是多少
32位系统,32个0,1组合表示的内存单元,8个十六进制数组合)
int类型变量所能存储的最大正数用十六进制表示: 7FFFFFFF
int类型变量所能存储的绝对值最大负整数用十六进制表示:
80000000
最小负数的二进制代码是多少 1(0-0 31个0)
最大正数的二进制代码是多少 0(1-1 31个1)
已知一个整数的二进制代码求原始的数字
按“已知二进制求十进制”求
数字超过最大正数会怎样 变成负数 0111 1111=127 1000 0000 -128
不同数据类型转化
丢失最高位.只截留后者类型所占的字节数。
例如: int 类型 转化 为char 则高3位字节被截取。只保留最后一位字节。