进制数&寄存器&内存

机器语言、汇编语言和高级语言

机器语言:计算机执行的二进制命令0和1。

汇编语言:用助记符代替机器指令的操作码(如:ADD表示加法)

高级语言:符合人们的习惯,也更容易理解和修改。高级语言经过编译器编译之后可以得到目标程序。(如:C++、JAVA)

进制的思想本质

二进制:0 1

三进制:0 1 2

四进制:0 1 2 3

八进制:0 1 2 3 4 5 6 7

十进制:0 1 2 3 4 5 6 7 8 9

十六进制:0 1 2 3 4 5 6 7 8 9 a b c d e f

测试-进制数是有规律的

进制的运算

 

 

数据宽度

数据类型 占用字节 取值范围
bit   【0 1】
byte=unsigned char 1个字节 【0 0xff】(备注:0xff=15*16^0+15*16^1=2^8-1=255)
word=unsigned short 2个字节 【0-0xffff】(备注:0xffff=15*16^0+15*16^1+15*16^2+15*16^3=2^16-1=65,535)
dword=unsigned long 4个字节 【0-0xffffffff】(备注:0xffffffff==2^32-1=4,294,967,295。-1是因为从0开始的)

无符号数和有符号数

无符号数只有正数,没有负数。而有符号数,因为要兼容负数的可能性,就要牺牲一个最高代位表示正负号(0正数,1负数)。  


用char来举例吧,char占一个字节,一个字节=8个二进制位,有符号和无符号的数值对比如下:
有符号:
  0111 1111 = 2^6+2^5+2^4+2^3+2^2+2^1+2^0  =2^7-1= 127
  取值范围是【-128 ~ 127】

无符号:
  1111 1111 = 2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0 =2^8-1= 255
  取值范围是【0  ~ 255

源码、补码和反码

正数的补码和原码、反码一样。

负数的反码是对原码按位取反,符号位一定是1;补码是反码加1,符号位一定是1。

 

 

 

 位运算

与&

  参加运算的两个数,换算为二进制(0、1)后,进行与运算。只有当相应位上的数都是1时,该位才取1,否则该为为0。

 

 

 

或|

  参加运算的两个数,换算为二进制(0、1)后,进行或运算。只要相应位上存在1,那么该位就取1,均不为1,即为0。

 

 

 

 

异或^

  参加运算的两个数,换算为二进制(0、1)后,进行异或运算。只有当相应位上的数字不相同时,该为才取1,若相同,即为0。

 

 

 

取反~

  每个位上都取相反值,1变成0,0变成1。

  1011 0001

  --------------------------------

  0100 1110

位运算

左移(shl <<)

1<<7 = 1*2^7 = 128

2<<3 = 1*2^3 = 8

3<<2 = 3 * 2^2 = 12

0000 0001 1
0000 0010 2 移动1位
0000 0100 4 移动2位
0000 1000 8 移动3位
0001 0000 16 移动4位
0010 0000 32 移动5位
0100 0000 64 移动6位
1000 0000  128 移动7位

右移(shr >>)

100>>2  = 100/2^2 = 25

64>>3 = 64/2^3 = 8

进制转换

二进制 十六进制 十进制 八进制
1001 1010

1010=1*2^1+1*2^3=10=a

1001=1*2^0+1*2^3=9

0x9a

 1*2^1+1*2^3+1*2^4+1*2^7=154

010=1*2^1=2

011=1*2^0+1*2^1=3

10=1*2^1=2

232

       

 八进制三位一组;十六进制四位一组。

十六进制转十进制:0x9a=10*16^0+9*16^1=154。

十进制转十六进制:154=0x9a

 八进制转十六进制:八进制转二进制,二进制再转十六进制。

八进制转十进制:232=2*8^0+3*8^1+2*8^2=154。

十进制转八进制:154 = 232

java代码编写进制前缀

二进制:0b 

八进制:0

十进制:无

十六进制:0x

寄存器

EAX、ECX、EDX、EBX为数据寄存器;

ESP、EBP为指针寄存器;

ESI、EDI变址寄存器。

 

 

 

 

内存

每个应用程序进程都有4GB的内存空间(虚拟内存)

32位的cpu的寻址能力到底是4GB

1、寻址最大值:ffff ffff + 1 = 1 0000 0000(字节b)

2、1 0000 0000 * 8 = 8 0000 0000(位bit)

3、

 

 

1B(byte,字节)= 8 bit

1KB(Kilobyte,千字节)=1024B

1MB(Megabyte,兆字节,百万字节,简称“兆”)=1024KB

1GB(Gigabyte,吉字节,十亿字节,又称“千兆”)=1024MB

64位的cpu的寻址能力

ffff ffff ffff ffff +1 = 2^64 = 18,446,744,073,709,551,616(字节b)=128GB

内存地址的写法

mov 数据宽度 内存地址 存的值

 

 

 

 

 

posted @ 2022-06-13 17:59  禁止摆烂  阅读(644)  评论(0)    收藏  举报