进制的定义:
进制的定义那么一进制改怎么表示
由一个符号组成,符号可以任意定义,逢一进一。例如用a表示一进制的符号,那么表示5的话就是aaaaa。
由此类推三进制可以这么定义,由三个符号表示,例如2,8,4表示三进制的符号位,那么表示3的话就是82,表示8的话就是44,计算过程如下:
三进制的计算过程 计算机使用二进制的原因当然,如果量子计算机真的实现了,我们就会使用量子计算机,那么计算机就不光只能使用二进制计算了,世界科技巨头正在攻克中!
为什么计算机习惯把数据和内存地址以16进制的形式表示,原因如下,二进制0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 如果我们用0表示0000 1表示0001 2表示0010依次类推 9表示1001 A表示1010 B表示1011 C表示1100 D表示1101 E表示1110 F表示1111。 到此我们发现这些符号正好是表示16进制的符号,所以,我们可以用一个16进制的符号表示4位的二进制数据,如果对密码学有研究的同学,对这个应该是很敏感,并且能够一眼看出两者的关系的。
可以任意一个可执行文件(.exe或者.dmg)查看他的二进制源文件就是一大推的AE 02 87 F3 B1 6A等等,可以看到任何一个可执行文件的源文件都是用16进制表示的,当然可可以用二进制表示,那么AE就写成了10101110如果一大串的话,看着是很麻烦的,所以计算机就有了用16进制来替代二进制的源文件的用法。
数据类型有长度的原因 常见数据宽度1位只能存储一个0或者1 1字节能存储8位8个0或者1或者0.1 1字能存储16位16个0或者1或者0.1 1个双字能存储32位32个0或者1或者0.1 所以他们的存储范围分别是:
数据宽度不同,可存储的范围不一样0x表示16进制,上面我们已经知道一个16进制的数代表4位二进制,即0xFF也可以表示成1111 1111八个1,正好是八位二进制,1字节的宽度,所以能表示的最大范围就是0~0xFF
如果数据宽度超过了最大宽度,超出的高位数据会被丢弃,如下面过程:所使用的编译器是VC++6.0 XCODE编译器不支持这样的语法以及使用地址查询这种工具
char类型在内存或者寄存器中占8个位,即一个字节,表示的最大值是0xFF 变量x的地址 变量x起始地址存放的16进制值是FF,可以看出超出的高位计算机丢弃了 无符号数二进制转换成十六进制是多少就是多少 0x9A 154无符号数全是正数,有符号数可正可负,对于有符号数,如果最高位是0则为正数,最高位是1则为负数
有符号数,最高位是0 正数 有符号数,最高位是1 负数验证有符号和无符号数在内存或者寄存器中是如何存储的:如下面过程,
打印输出0x1A000000的无符号数和有符号数的结果 打印结果是一样的可以看出有符号和无符号结果是一样的,前提是对于正数的有符号和无符号是这个结果,0x1A000000二进制表示是0001 1010 0000 0000 0000 0000 0000 0000可以看出最高位是0,则不管是有符号还是无符号,结果都是正数,如果把最高位改为1,结果会怎样呢,同样如下验证:
打印输出0x9A000000的无符号数和有符号数的结果 打印结果不一样可以看出有符号和无符号结果是不一样的,无符号打印是它自身的值,有符号数打印是负数,0x9A000000二进制表示是1001 1010 0000 0000 0000 0000 0000 0000可以看出最高位是1,则有符号数打印结果是负数
对于0x9A000000打印有符号的结果为啥是-1711276032这个结果,就需要认识一下二进制的原码 反码和补码是怎么一回事!
原码 反码 补码的定义:
正数负数原码 反码 补码的定义例如1的原码是多少,首先要确定1的数据宽度,即占多大空间,假如数据宽度是8位,那么1的原码就是0000 0001,又因为正数的原码和反码 补码相同则反码 不嘛都是0000 0001
又比如6的原码是0000 0110,则6的反码 补码都是0000 0110
下面看一下计算机是一什么样的形式存储正数的,如下过程:
正数1在计算机中是怎么存储的 变量x的地址是0012FF7C 0012FF7C地址里面放的是十六进制01即十进制1可以看出正数在计算机中是以原码存储的,也可以是以反码 补码存储的,因为正数的原码 反码 补码是一样的
又例如-1的原码是1000 0001,最高位是符号位(1表示负数),后面几位的值是-1的绝对值,所以-1的原码是1000 0001 -1的反码是1111 1110 -1的补码是1111 1111如果用十六进制表示就是0xFF 验证过程如下:
负数-1在计算机中是怎么存储的 变量的地址 0012FF7C地址里面放的是十六进制FF即负数-1可以看出负数在计算机中是以补码存储的
可以再一次验证一下-7在计算机中存储结果是啥?-7的原码是1000 0111 -7的反码是1111 1000 -7的补码是1111 1001 把上面程序改一下,过程如下:
把-1改成-7看下存储结果 变量x地址 0012FF7C存储的值是F9二进制形式是1111 1001所以可以确认负数在计算机中是以负数的补码的形式存储的
那么计算机是怎么使用加减乘除进行算数运算的呢,就需要掌握二进制的位运算,加减乘除都是通过位运算实现的,具体实现过程如下:
需要熟练掌握的原因 与运算,都是1才是1 或运算,有一个是1就是1 电路图两个开关都往上打开灯泡是不会亮的,只有一个往上另一个往下灯泡才会亮,即两个开发开的方法不一样,就是异,或就是只要有一条导线再连接上异(开的方向不一样)就构成了一条回路,灯泡就亮了,这就是异或概念的来源 按位取反 左移运算 右移运算在汇编语言中,如果用shr移动,则高位补0,如果使用sar移动,则高位补1。
7+8=?在计算机的运算过程如下过程
7+8的运算过程7+6=?在计算机的运算过程如下过程
7+6的运算过程4-5=(4+(-5))=?在计算机的运算过程如下过程,我们之前验证过-1是0xFF,那么-5就是0xFB了,下面是计算过程
4+(-5)的运算过程对于乘法运算就是多次相加,比如4*5,就是5个4相加,循环就可以了,对于除法,比如12/3,就是12里面有几个3,可以用12减去3,看什么时候是负数,就得到了商。
网友评论