概述
直接进入正题,介绍下相关的几个概念,学计算机的都应该知道,
1.机器码:就是二进制数。
2.无符号数:不考虑正负号的机器数。
3.有符号数:考虑正负号的机器数。 注:有符号数通常规定最高位为符号位,并用0表示正,用1表示的是负余下的就是数值
下面介绍下机器码中的原码,反码,补码。
1.原码:
定义机器数本身就是源码表示法,例如:经典的例子(125),原码表示为
01111101,这里最高位是符号位。
2.反码:正数的反码就是原码,负数的反码就是将符号位以外的各位取反,得到例如:(125)原 = (125)反 =
01111101,(-125)原 = 11111101,(-125)反 = 10000010.
3.补码:正数的补码还是它的原码,负数的补码是将它的反码的末位加1,例:(125)补 = (125)原 =
01111101,(-125)原 = 11111101,(-125)反 =
10000010,(-125) = 1000011
总结上面的:正数的原码,反码,补码都相同。负数中反码除符号外取反,补码在反码末位加1即可。
下面来讲解今天遇到的问题:
《十进制负数转化成八进制和十六进制》
以网上提供 -167转换为例子,笔者在换算的时候出现了各种各样的情况,不过是第一次计算也是正常的,
先把-617用补码表示,然后再转换成八进制和十六进制(补码),下面的是网上摘下的记录:
二进制转为 8
进制,用 3 位二进制位编为一组(不够左侧补 0),然后从右边开始每三位按如下方式替换:
000 - 0, 001 - 1, 010 - 2, 011 - 3,
100 - 4, 101 - 5, 110 - 6, 111 - 7.
二进制转为16进制,用4位二进制位编为一组(不够左侧补0),然后从右边开始每四位按下方式替换
0000 - 0, 0001 - 1, 0010 - 2, 0011 - 3
0100 - 4, 0101 - 5, 0110 - 6, 0111 - 7
1000 - 8, 1001 - 9, 1010 - A, 1011 - B
1100 - C, 1101 - D, 1110 - E, 1111 - F
Turbo
C中整数是16位的,617的二进制是00000010 01101001,取反加1得到-617的补码为11111101
10010111,每3位转成1个八进制数
1111110110010111 --二进制
1 7 6 6 2 7 --八进制
最后
以上就是传统自行车为你收集整理的c语言源码补码机器码的定义,机器码的基本概念和几种进制的转换问题的全部内容,希望文章能够帮你解决c语言源码补码机器码的定义,机器码的基本概念和几种进制的转换问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复