八位计算机最小二进制,八位二进制补码最小值

好吧,小编虽然上个C++语言和VB语言基础,虽然那个爱笑的从国外留学回来的老师讲课很好很精彩,但无奈小编跟不上呀。所以下面是学习啦小编给大家总结的八位二进制补码最小值和二进制补码知识点。

八位二进制补码最小值

8位二进制补码表示整数的最小值是 -128, 最大值是 +127.

原因:正数的补码就是其本身,8位二进制最大正整数是 0111111,也就是十进制值 127。

负数的补码是它原数的反码加1,最小值,就是负得最多的数,

即二进制 1000 0000。十进制-128。

推导: -128 =(-1)+(-127) = 原码 1000 0001+原码 1111 1111 =

补码 1111 1111 + 补码 1000 0001 = 补码 1000 0000。

什么是二进制的补码?

注明:正数的补码与负数的补码一致,负数的补码符号位为1,这位1即是符号位也是数值位,然后加1

补码借鉴的模概念,虽然理解起来有点晦涩难懂。可以跳过

模的概念:把一个计量单位称之为模或模数。例如,时钟是以12进制进行计数循环的,即以12为模。

在时钟上,时针加上(正拨)12的整数位或减去(反拨)12的整数位,时针的位置不变。14点钟在舍去模12后,成为(下午)2点钟(14=14-12=2)。从0点出发逆时针拨10格即减去10小时,也可看成从0点出发顺时针拨2格(加上2小时),即2点(0-10=-10=-10+12=2)。因此,在模12的前提下,-10可映射为+2。由此可见,对于一个模数为12的循环系统来说,加2和减10的效果是一样的;因此,在以12为模的系统中,凡是减10的运算都可以用加2来代替,这就把减法问题转化成加法问题了(注:计算机的硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)。10和2对模12而言互为补数。同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为16),因此它的运算也是一种模运算。当计数器计满16位也就是65536个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,16位二进制数,它的模数为2^16=65536。在计算中,两个互补的数称为“补码”。比如一个有符号8位的数可以表示256个数据,最大数是0 1 1 1 1 1 1 1(+127),最小数1 0 0 0 0 0 0 0 (-128);那么第255个数据,加2和减254都是一样的效果得出的结果是第一个数据 ,所以2和254是一样的效果。对于255来说2和254是互补的数。

求一个正数对应补码是一种数值的转换方法,要分二步完成:

第一步,每一个二进制位都取相反值,即取得反码;0变成1,1变成0。比如,00001000的反码就是11110111。

第二步,将上一步得到的反码加1。11110111就变成11111000。所以,00001000的二进制补码就是11111000。也就是说,-8在计算机(8位机)中就是用11111000表示。

不知道你怎么看,反正我觉得很奇怪,为什么要采用这么麻烦的方式表示负数,更直觉的方式难道不好吗?

二进制补码的好处

首先,要明确一点。计算机内部用什么方式表示负数,其实是无所谓的。只要能够保持一一对应的关系,就可以用任意方式表示负数。所以,既然可以任意选择,那么理应选择一种用的爽直观方便的方式。

二进制的补码就是最方便的方式。它的便利体现在,所有的加法运算可以使用同一种电路完成。

还是以-8作为例子。假定有两种表示方法。一种是直觉表示法,即10001000;另一种是2的补码表示法,即11111000。请问哪一种表示法在加法运算中更方便?随便写一个计算式,16 + (-8) = ?16的二进制表示是 00010000,所以用直觉表示法,加法就要写成:

00010000

+10001000原码形式-8

---------

10011000

可以看到,如果按照正常的加法规则,就会得到10011000的结果,转成十进制就是-24。显然,这是错误的答案。也就是说,在这种情况下,正常的加法规则不适用于正数与负数的加法,因此必须制定两套运算规则,一套用于正数加正数,还有一套用于正数加负数。从电路上说,就是必须为加法运算做两种电路。所以用原码表示负数是不行的。

现在,再来看二进制的补码表示法。

00010000

+11111000补码形式-8

---------

100001000

可以看到,按照正常的加法规则,得到的结果是100001000。注意,这是一个9位的二进制数。我们已经假定这是一台8位机,因此最高的第9位是一个溢出位,会被自动舍去。所以,结果就变成了00001000,转成十进制正好是8,也就是16 + (-8) 的正确答案。这说明了,2的补码表示法可以将加法运算规则,扩展到整个整数集,从而用一套电路就可以实现全部整数的加法。(特别说明,有部分素材来自博主JQ_AK47)

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

二进制图文详解 二进制Binary 2进制 逢二进一的计数规则。 在计算机内部,一切数据都是2进制的!! 2进制的数字 补码 补码本质是一种解决负数问题的算法。 1. 将数据的一半当做负数使用。 2. 补码在内存中是2进制的,显示的时候为10进制。 - Java利用算法支持了补码计算: - Integer.parseInt() - Integer.toString() 3. 补码的缺点: - 不支持超范围计算 - 超范围计算自动溢出 4. 解决补码的缺点:采用更大范围(更多位数)的补码 Java是如何计算 -2-1 的 补码的规律 1. 最大值的规律:最高位0 剩下全是1 - int类型:一个0,31个1 - long类型:一个0,63个1 2. 最小值的规律:最高位1 剩下全是0 - int类型:一个1,31个0 - long类型:一个1,63个0 3. 负数的最高位是1, 正数最高位是0 - 最高位做为识别正数和负数的标志位:称为符号位 - 注意:符号位不是用来表示正负号的!!! 4. -1 的规律:所有位都是1!! 5. 溢出是有规律的! 是一个周期性计算结果。 - 最大值+1 = 最小值 6. 补码的对称现象:-n = ~n + 1 案例: int max = Integer.MAX_VALUE; System.out.println(Integer.toBinaryString(max)); int min = Integer.MIN_VALUE; System.out.println(Integer.toBinaryString(min)); long lmax = Long.MAX_VALUE; System.out.println(Long.toBinaryString(lmax)); long lmin = Long.MIN_VALUE; System.out.println(Long.toBinaryString(lmin)); //-1的规律 int n = -1; System.out.println(Integer.toBinaryString(n)); long l = -1L; System.out.println(Long.toBinaryString(l)); //最大值+1溢出得到最小值 // 推论:Java中的int数字是按照补码圆环排列的 int m = Integer.MAX_VALUE+1; System.out.println(m);//最小值 //一个数的溢出测试: n = 345; m = n + Integer.MAX_VALUE+1; System.out.println(m);//负数 m = n + Integer.MAX_VALUE+1+ Integer.MAX_VALUE; System.out.println(m);//344 正数 m = n - (Integer.MAX_VALUE+1+ Integer.MAX_VALUE+1); System.out.println(m);//345 正数 经典面试题1 正数的溢出结果是负数(错误!!!) 经典面试题2 int i = Integer.MAX_VALUE+1; System.out.println( Integer.toBinaryString(i)); 选择运行结果(D): A. 11111111111111111111111111111111 B. 1111111111111111111111111111111 C. 01111111111111111111111111111111 D. 10000000000000000000000000000000 经典面试题3 System.out.println(~-55); 如上代码的运算结果: ( 54 ) System.out.println(~-230); 如上代码的运算结果: ( 229 ) System.out.println(~55); 如上代码的运算结果: ( -56 ) 16进制 16进制是2进制的简写形式 2进制运算 1. ~ 取反运算 2. & 与运算(逻辑乘法) 运算规则: 1 & 1 = 1 1 & 0 = 0 0 & 1 = 0 0 & 0 = 0 与运算用途: n: 00010100 11010111 01010001 11101010 m: 00000000 00000000 00000000 11111111
专为程序员打造的计算器,二进制运算强大,支持64位。 采用表达式驱动,输入表达式便即时显示结果,抛弃传统计算器繁琐的按钮,表达式可粘贴或回调重复使用。 支持二进制串直接运算,如0b1101 & 0b0011= 0b0001。 支持与、或、非、异或、移位(循环、逻辑、算术),直接读写二进制位,指定位段读、写、置1、清0、反转。 二进制数据表达方式多样,数据可以K、M、G等单位为后缀。 支持类C语言库函数调用。 结果可以各种进制、各种单位输出。 运算结果可存放在变量中。 内置常用生活函数。 总之,此计算器相当于解释执行的C语言表达式,但用起来更方便、更高效。 使用前请仔细阅读窗口内的帮助,便可成为开发工作中的好帮手。 [程序员二进制计算器 v1.36 帮助] 一 用法 在底部框中输入要计算的表达式,会即时显示计算结果,当无结果时说明表达式输入有误。 按回车键保存该次输入、清空输入框,并显示详细结果,包括可能有的错误信息。 在底部框中按键盘上、下箭头,可以调出历史输入。 当光标在结果框内时,按回车或TAB键可使光标跳至输入框。 二 特点 即时计算。 便捷的历史回调、复制、粘贴功能。 支持64位整型运算,整数有效范围为 -9223372036854775808 至 9223372036854774784。 三 数的表示 1-整型数表示法 如何表示二、八、十六进制整数: (1)二进制数 以0b或0B开头,后面的0、1数字之间可以用空格分隔。 0b1001 = 9 0b 1001 0110 = 0x96 = 150 0B1001 0110% = 150% = 1.5 (2)八进制数 以0开头: 010 = 8 027 + 7 = 23 + 7 = 30 (3)十六进制数 以0x或0X开头: 0x10 = 16 -0XabEF * 2 = -44015 * 2 = -88030 2-浮点数表示法 (1)小数点前后的省略表示 3.14 3. = 3.0 .14 = 0.14 (2)用科学计数法表示浮点数 3e2 = 300 3e+2 = 300 3e-2 = 0.03 3.e2 = 300 3.e+2 = 300 3.14e-2 = 0.0314 .14e+2 = 14 3-字符型表示法 支持字符常量,字符型自动转换为整型(值为该字符的ASCII码),支持C/C++转义字符。 如何得到字符的ASCII码: 'a' = 97 'A' = 65 'a' + 3 = 100 'a' - 'A' = 32 '\''=39 '\"' = '"' = 34 '\? = '?' = 63 '\\' = 92 '\a' = 7 '\b' = 8 '\f' = 12 '\n' = 10 '\r' = 13 '\t' = 9 '\v' = 11 4-量词后缀表示 一个数的后面,可以跟有倍率运算符,表示该数乘以相应的倍数,例如: 2w = 20000 (2万) 13y = 1300000000 (13亿) 4k = 4096 3% = 0.03 (百分之3) 详见“倍率运算”部分。 三 运算结果的输出格式 1-指定方法 格式: [格式前缀] 表达式 表达式前面可带有“格式前缀”(可选的),用来指定运算结果的输出格式。 “格式前缀”与C/C++的printf函数基本相同,但不支持%s或%S。 当省略格式前缀时,默认按%g方式输出。此时对较小的数按原样输出,较大的数按科学计数法输出。 2-整型的输出格式 当按二、八、十六进制输出时,是按其补码形式输出,最高位是符号位(正数为0、负数为1)。 所以此法可得到一个负数的补码表示。 (1)按二进制输出 %b或%B %b等价与%B。 %b 12 = 0b1100 %b 0xffffffff = 0b1111 1111 1111 1111 1111 1111 1111 1111 (2)按八进制输出 %o或%O %o等价与%O
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值