负数的二进制表示法

先了解几个概念

【1】原码:

·正数的原码,按照绝对值转换成二进制

·负数的原码,按照绝对值转换成二进制,最高位补1(有符号的整形最高位用来表示正\负,0为正数,1为负)

示例:

整数5的原码

00000000 00000000 00000000 00000101

整数-5的原码

10000000 00000000 00000000 00000101

【2】反码:

·正数的反码,与原码相同

·负数的反码,符号位不变,其余为取反

示例:

整数5的原码与反码表示

原码:00000000 00000000 00000000 00000101

反码:00000000 00000000 00000000 00000101

整数-5的原码与反码表示

原码:10000000 00000000 00000000 00000101

反码:11111111 11111111 11111111 11111010

【3】补码

·正数的补码,与原码相同

·负数的补码,符号位不变,其余为取反,最低位+1

示例:

整数5的原码反码与补码表示

原码:00000000 00000000 00000000 00000101

反码:00000000 00000000 00000000 00000101

补码:00000000 00000000 00000000 00000101

整数-5的原码、反码与补码表示

原码:10000000 00000000 00000000 00000101

反码:11111111 11111111 11111111 11111010

补码:11111111 11111111 11111111 11111011

【4】特殊

为简单起见以长度为1byte的char举例

-128表示为

1000 0000,那么,它的原码是什么呢?从补码求原码的方法跟原码求补码是一样的。先保留符号位其它求反:  1111 1111, 再加1,11000 0000, 超过了8位了。对,用8位数的原码在这里已经无法表示了。

那么,回到原码处, 它的原码也是 1000 0000(超出的自动丢失),1000 0000 在原码表示什么呢? -0, 但补码却规定0没有正负之分。

转换一下思路,看看计算机里,是怎么运算的:

对于负数,先取绝对值,然后求反,加一

-128 -> 128 -> 1000 0000 -> 0111 1111 -> 1000 0000

现在明确了吧

所以, 8位有符号的整数取值范围的补码表示

1000 0000 到 0000 0000, 再到 0111 1111

即 -128 到 0, 再到 127

最终 -128 ~ +127

转自:http://blog.sina.com.cn/s/blog_56d8ea900100y65b.html

时间: 2024-11-09 02:50:58

负数的二进制表示法的相关文章

十进制负数转换为二进制、八进制、十六进制的知识分享

这篇文章主要介绍了十进制负数转换为二进制.八进制.十六进制的知识分享,需要的朋友可以参考下 程序猿们或许对二进制都不陌生,二进制是计算技术中广泛采用的一种数制.二进制数据是用0和1两个数码来表示的数.但是很多人都会将二进制转换成整数,但是如何用二进制表示负数呢?有的人会说,在二进制前面加个负数符合.而计算机只能认识0 和 1,又怎么去加个额外的负数符号呢?于是我们就需要用0和1来表示负数.如果想要弄懂这个,我们需要先了解什么是二进制原码. 原码是什么 原码(true form)是一种计算机中对数

负数的二进制表示方法

转自:http://blog.sina.com.cn/s/blog_56d8ea900100y65b.html 一:表示法:1.正数5的表示法假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:00000000 00000000 00000000 000001015转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0. 2.负数-5的表示法现在想知道,-5在计算机中如何表示?在计算机中,负数以原码的补码形式表达. 二.概念:1.原码:一个正数,按照绝

JAVA中负数转二进制分析

最近在看集合源码,发现ArrayDeque里面用到了大量的&运算,这牵扯到了二进制.突然发现自己对负数的二进制有点模糊了,对此进行了一些支持补充. 首先我们要对原码.反码和补码有个了解: 1.所谓原码就是二进制定点表示法,即最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. 2.反码表示法规定:正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外. 原码10010= 反码11101 (10010,1为符号码,故为负) (1110

Java整数占几个字节,以及负数的二进制表示方法,以及Java的逻辑运算符>>和>>>的区别

Java整数占几个字节? 答:占4个字节,共32个比特位 1个字节占8个比特位(1B(byte)= 8 bit) 因此,类型和字节对应如下 byte 1 short 2 char 2 int 4 float 4 double 8 double  8 -----------------------------------------------------------------------以下是用System.out.println的SIZE输出-------------------------

负数的二进制表示

在二进制中,用最高位来表示整数和负数. 比如 System.out.println(Integer.toBinaryString(1)); System.out.println(Integer.toBinaryString(-1)); 会输出 整数前面的0被省略了. 或者这样 public void test(){ System.out.println(Integer.toBinaryString(Integer.MAX_VALUE)); System.out.println(Integer.t

记一次负数的二进制

这是去年的一个填空题,当然,只要知道换算二进制就完全没问题的~ 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 5 void to2(int x) 6 { 7 int flage = 0; 8 flage = (x>0)?1:-1; 9 if(x == 0) flage = 0; 10 switch(flage) 11 { 12 case 0:cout<<" ";

负数的二进制如何转化为十进制

转发 -5 如何用二进制表示 取反加1 5 =0000 0101 取反 1111 1010 加1 1111 1011 所以这个就表示 -5 1111 1011  对应十进制中的多少        [减一取反] 首位是 1 ,故是负数 减一      1111 1010 取反           0000 0101=5 所以答案是    -5 原文地址:https://www.cnblogs.com/gongchengniu/p/12168991.html

多重背包(二进制拆分法)

众所周知,从20 ,21,...,2k-1这k个2的整数次幂中选出若干相加,可以表示出0~2k-1之前的任意整数 所以我可以把Ci个物品分解成p+2个 即若干个2的幂次方为系数的体积(对下面的这些体积进行0/1背包) 20*Vi+...+2p*Vi+Ri*Vi for(int i=1;i<=n;i++){//种类数 int temp=c[i]; int now=1; while(1){ //把c[i]拆解成若干个2的幂次方 if(temp>now){ temp-=now; for(int j=

Java语法基础---进制---负数二进制

八进制:用0开头表示. 十六进制:用0x开头表示. 负数的二进制表现形式    对应的正数二进制,取反加1,负数二进制最高位为1,正数二进制最高位为0