二进制的反码

c语言的二进制数有三种表示方法:原码、反码、补码 , 主要讲反码(8位机器)

什么是反码呢?

  正数:它的反码就是它本身

  负数:它的反码在其原码的基础上, 符号位(什么是符号位?二进制表示正数负数使用二进制的最高位为1表示负数,0表示正数)不变,其余各个位取反

  比如:-1 = 10000001 - 符号位不变,其他位取反 -> 11111110

        +1 = 00000001 - 正数的反码就是它本身 -> 00000001

  计算:1 + (-1) = 00000001 + 11111110 = 11111111(再取反) = 10000000 = -0(其实+0和-0没有什么区别)

  结果:发现用反码计算减法, 结果的真值部分是正确的. 而唯一的问题其实就出现在"0"这个特殊的数值上. 虽然人们理解上+0和-0是一样的, 但是0带符号是没有任何意义的. 而且会有[0000 0000]原和[1000 0000]原两个编码表示0,于是就出现了补码表示法来解决这种问题

  注:原码, 反码和补码是完全不同的. 既然原码才是被人脑直接识别并用于计算表示方式, 为何还会有反码和补码呢?

    因为:首先, 因为人脑可以知道第一位是符号位, 在计算的时候我们会根据符号位, 选择对真值区域的加减. (真值的概念在本文最开头). 但是对于计算机, 加减乘数已经是最基础的运算, 要设计的尽量简单. 计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂! 于是人们想出了将符号位也参与运算的方法. 我们知道, 根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法, 这样计算机运算的设计就更简单了

  

时间: 2024-12-13 01:29:40

二进制的反码的相关文章

Java 二进制表示整负数算法

计算机对有符号数(包括浮点数)的表示有三种方法:原码.反码和补码, 补码=反码+1.在 二进制里,是 用 0和 1 来表示正负的,最高位为符号位,最高位为 1 代表负数,最高位为 0 代表正数. 以java中8位的byte为例,最大值为:0111 1111(127),最小值为1000 0001(-128). 那么根据十进制的数字,我们如何转换为二进制呢?对于正数我们直接转换即可. 对于负数则有一个过程,那么已负(-128)为例: 1:先将-128的绝对值转换成二进制,即为:1111 1111 2

i&1、负数二进制

if(i&1==1) 表示 如果是 奇数 则...i&1 -- 按位与运算,取 2进制整数 i 的最低位,如果最低位是1 则得1,如果最低位是0 则得0. 奇数 i 的最低位 是1,偶数i 的最低位 是0.负数二进制表示:计算机对有符号数(包括浮点数)的表示有三种方法:原码.反码和补码, 补码=反码+1.在 二进制里,是用 0 和1 来表示正负的,最高位为符号位,最高位为 1 代表负数,最高位为 0 代表正数. 以负数-5为例: 1.先将-5的绝对值转换成二进制,即为0000 0101:

十进制、二进制、八进制、十六进制之间的转换[基础]

今天翻了一本计算机基础的书籍,其中十进制.二进制.八进制.十六进制之间的转换挺有意思的,也容易犯糊涂,特温故而知新. 十进制数制系统 十进制数制系统包括 10 个数字:0.1.2.3.4.5.6.7.8.9 基为:10        逢十进一,如3+7=10,20+80=100 二进制数制系统 计算机中使用二进制表示数据 二进制包括两个符号:0和1 二进制逢二进一:(1+1)2=(10)2 二进制的基为2 示例:1000101100101101 八进制数制系统 用于缩短二进制的数字长度 八进制基

补码与反码

补码 与反码 计算机中一般采用补码的形式来简化减法运算和逻辑运算.在电路功能实现是,简化减法运算可以减少多余的电路,降低了复杂度.每个进制系统都有两种类型的补码:基数补码和基数减1补码(基数反码). 1.基数反码 定义:对于一个数字:有n位,且进制是r,的数字是N,其反码的定义是(rn -1)-N :例如对于546700的反码的运算就是 106-1 =999999: 999999-546700=453299: 二进制的反码 :对于10001 Rn-1即10000-1=1111 1111-1000

leetcode 1009. 十进制整数的反码(Complement of Base 10 Integer)

目录 题目描述: 示例 1: 示例 2: 示例 3: 解法: 题目描述: 每个非负整数 N 都有其二进制表示.例如, 5 可以被表示为二进制 "101",11 可以用二进制 "1011" 表示,依此类推.注意,除 N = 0 外,任何二进制表示中都不含前导零. 二进制的反码表示是将每个 1 改为 0 且每个 0 变为 1.例如,二进制数 "101" 的二进制反码为 "010". 给定十进制数 N,返回其二进制表示的反码所对应的

1007 数字逻辑练习题

1007: 数字逻辑练习题 时间限制: 1 Sec  内存限制: 128 MB提交: 264  解决: 59[提交][状态][讨论版] 题目描述 原码.反码.补码都是一样的,都是正数本身.  对于负数: 原码是符号位为 1,数值部分取绝对值的二进制. 反码是符号位为 1,其它位是原码取反. 补码是符号位为 1,其它位是原码取反,未位加 1.  输入一个 64bit 十进制整数,输出它的原码,反码,补码的 16 进制表示法 输入 有多组数据,每组数据一行,为一个 64bit 十进制整数,包含正负符

JS高级程序设置笔记(一)

第一章   1.1 ECMA:欧洲计算机制造商会 ISO/IEC:国标标准话组织和国际电工委员会 1.2JavaScript实现 一个完整的JavaScript实现应该由以下三个不同的部分组成 (1)核心(ECMAScript) (2)文档对象模型(DOM) (3)浏览器对象模型(BOM) 1.2.1 ECMAScript 组成部分:语法.类型.语句.关键字.保留字.操作符.对象. 1.2.2 文档对象模型(DOM) 文档对象模型是针对XML但经过拓展用于HTML的应用程序编程接口(API Ap

javascript——操作符(~、&、|、^、<<、>>)

直接上代码吧! 1 <script type="text/javascript"> 2 //javascript操作符 3 //1.按位非~ 4 var num1=25;// 5 var num2=~num1;// 6 alert(num2) 7 8 var num3=10; 9 var num4=~num3; 10 alert(num4) 11 12 var num5=99; 13 var num6=~num5; 14 alert(num6) 15 16 //说明:相信大

无符号位移(&gt;&gt;&gt;、&lt;&lt;&lt;) 有符号位移(&gt;&gt;、&lt;&lt;)

无符号位移(>>>)和有符号位移(>>)的区别是 有符号位移运算时如果数字为正数时位移后在前面补0,为负数时则在位移后在前面补1 举例说明最快 以15位例(负数以-15为例) 15的二进制 :00000000 00000000 00000000 00001111 -15的二进制:11111111 11111111 11111111 11110001 计算过程:补码(负数的二进制)=反码+1 反码:11111111 11111111 11111111 11110000 补码(即