超简单的小例子揭开机器数的奥秘——原码、反码、补码、移码

各种数值在计算机中的表示形式称为机器数,机器数采用二进制数来表示数据,数据的正负号也分别用0和1来表示。为了便于运算,带符号的机器数可采用原码、反码、补码、移码等编码方法。

注:以下规则均以机器字长为8(即采用8个二进制位来表示数据)来举例说明。

原码

⊙正数:如下图①先写上要表示的数据,②符号位(首位)写上0,③如果有空位则用0补上,如X=22=10110B,则[X]原=00010110;

⊙负数:如下图①先写上要表示的数据,②首位写上1,③如果有空位则用0补上,如X=-27=-11011B,则[X]原=10011011。

反码

⊙正数:反码等于原码,如X=10110,则[X]反=[X]原=00010110;

⊙负数:如下图,在原码的基础上,④符号位(首位)不变,⑤其他位按位取反(0变成1,1变成0),如X=-11011,则[X]原=10011011,[X]反=11100100。

补码 

⊙正数:补码等于原码和反码,如X=10110,则[X]补=[X]反=[X]原=00010110;

⊙负数:在反码的基础上,⑥让反码加1,如X=-11011,则[X]原=10011011,[X]反=11100100,[X]补=11100101。

移码

正数和负数的移码,都是在反码的基础上,让反码的符号位取反,即得该数的移码。如X=-11011,则[X]原=10011011,[X]反=11100100,[X]补=11100101,[X]移=01100101。

补充:小数的原码、反码、补码、移码的转换

原码、反码、补码、移码这几种表示方式之间的转换,基本上只有正数和负数转换的时候有些差别,当遇到小数时,只需要把小数也表示为二进制,转换方式跟正数一样。如X=0.25=0.01,[X]原=0.0100000,[X]反=0.1011111,[X]补=0.1100000,[X]移=1.1100000。

时间: 2024-08-08 01:28:07

超简单的小例子揭开机器数的奥秘——原码、反码、补码、移码的相关文章

Spring简单的小例子SpringDemo,用于初略理解什么是Spring以及JavaBean的一些概念

一.开发前的准备 两个开发包spring-framework-3.1.1.RELEASE-with-docs.zip和commons-logging-1.2-bin.zip,将它们解压,然后把Spring开发包下dist目录的所有包和commons-logging包下的commons-logging-1.1.1.jar复制到名为Spring3.1.1的文件夹下.那么Spring开发所需要的包就组织好了. 二.建立项目,导入包 在项目节点上右键,Build Path/ADD Libraries/U

一个简单的小例子让你明白c#中的委托-终于懂了!

模拟主持人发布一个问题,由多个嘉宾来回答这个问题. 分析:从需求中抽出Host (主持人) 类和Guests (嘉宾) 类. 作为问题的发布者,Host不知道问题如何解答.因此它只能发布这个事件,将事件委托给多个嘉宾去处理.因此在Host 类定义事件,在Guests类中定义事件的响应方法.通过多番委托的"+="将响应方法添加到事件列表中,最终 Host 类将触发这个事件.实现过程如下: 代码其实很少下面贴出来所有代码: QuestionArgs.cs view plaincopy to

vuex在组件化开发中的简单应用小例子

首先, 介绍一下vuex是个什么东西, 个人理解来说, vuex就是一个状态管理的东西, 它里面有且仅有一个Store仓库, 这个仓库里面存放着一些变量, 为什么要有这么一个变量呢, 用过vue的人肯定都清除, 父子组件之间的通讯传值是个比较麻烦的事情, 特别是, 嵌套组件特别多的时候, 这种情况下, 一级一级地传递下去十分麻烦, 还有就是兄弟组件之间的传值也一样麻烦. 而vuex中的Store这个仓库, 就能够为我们将放在这个仓库中的值, 分发给整个项目下的所有组件, 也就是说是, 不用一级一

超简单的通过年月得到当月天数,从简单的小例子来解析代码的优化

首先分析问题,通过年月得到当前月份的天数,按照生活中的惯性,就是分析年份,后分析月份,这里我要说不,虽然这样同样可以算出结果,速度上也与先判断月份相差毫微,虽然这个时间短的可以忽略不计,但是作为一个有情怀的程序员,对代码的要求就是要短小精悍,能省就省,我先列出两种分析方式的算法代码,当然这种写法是最笨重的,这里主要是为了突出问题,优化一步步来,我始终强调,先分析问题,只要会写代码的程序员写完立马就会改为方式二的写法,因为在代码量上很直观,一眼就能看的清楚: 先判断年份的写法: public st

1个争用资源的简单线程小例子

main()本身就是一线程,现在在main内部再创建另一个线程, 例子只是简单的在两个线程中打印了一下TID和PID以及获取本身PID,当然两个线程的TID是一样的,PID是不一样的. 这里主要说的是:两个线程一起运行,屏幕上显示的各线程的内容,因为一起争用资源,造成了打印信息内容的重叠. 代码: #include <iostream> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #i

Python绘制PDF文件~超简单的小程序

Python绘制PDF文件 项目简介 这次项目很简单,本次项目课,代码不超过40行,主要是使用 urllib和reportlab模块,来生成一个pdf文件. reportlab官方文档 http://www.reportlab.com/docs/reportlab-userguide.pdf 我们看看这个网页上的原数据: http://www.swpc.noaa.gov/ftpdir/weekly/Predict.txt 代码: #-*- coding: utf-8 -*- # 1. 用于下载原

一个强悍的极简单递归小例子帮你从程序执行的角度理解递归

1 public class test { 2 public static void main(String[] args) { 3 swap(3); 4 } 5 public static int i=1; //全局变量 6 public static void swap(int a){ //局部变量 7 if(a>0){ 8 a--; 9 System.out.println("第"+i+"层:"); 10 System.out.println("

gulp安装+一个超简单入门小demo

gulp安装參考.gulp安装參考2. 一.NPM npm是node.js的包管理工具.主要功能是管理.更新.搜索.公布node的包. Gulp是通过npm安装的. 所以首先,须要安装node.js.而且升级npm到最新版本号. 安装nodeJS 基本參考传送门戳这里:安装nodeJs.安装nodeJs2.nodeJs下express的安装到执行 1.    从nodejs.org下载最新的nodejs安装包.并安装. 2.    进入nodejs的安装路径下: 天真的以为这样就能够了. wat

java入门---简介&amp;简单输出小例子&amp;开发前准备

    Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称.由James Gosling和同事们共同研发,并在1995年正式推出.Java分为三个体系: JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版) JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平台企业版) JavaME(J2ME)(Java 2 Plat