首页 > 其他分享 >byte,short,int等类型的转换以及原理,原码,反码,补码

byte,short,int等类型的转换以及原理,原码,反码,补码

时间:2023-02-19 23:37:18浏览次数:36  
标签:short 反码 int 补码 1111 FF 0000 原码


理论:

  1. 八个比特(Bit)称为一个字节(Byte),最大[11111111],即FF;
  2. 两个字节称为一个字(Word,Short),最大[1111 1111 1111 1111],即FF FF,
  3. 两个字称为一个双字(Dword,Int),最大[1111 1111 1111 1111 1111 1111 1111 1111],即FF FF FF FF
  4. 两个双字称为一个四字(Qword,long)。
  5. 数值在计算机中是以补码的方式存储的,在探求为何计算机要使用补码之前, 让我们先了解原码, 反码和补码的概念。
  6. 对于一个数, 计算机要使用一定的编码方式进行存储。 原码, 反码, 补码是计算机存储一个具体数字的编码方式。一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。
  7. 十进制中的数 +2 ,计算机字长为8位,转换成二进制就是[0000 0010]。如果是 -2 ,就是 [1000 0010] 。
  8. 因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 [1000 0010],其最高位1代表负,其真正数值是 -2 而不是形式值130([1000 0010]转换成十进制等于130)。所以将带符号位的机器数对应的真正数值称为机器数的真值。
  • 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
  • 反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
  • 补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。 (即在反码的基础上+1)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

那么计算机为什么要使用补码呢?
  首先,根据运算法则减去一个正数等于加上一个负数, 即: 1-1 = 1+(-1), 所以计算机被设计成只有加法而没有减法, 而让计算机辨别”符号位”会让计算机的基础电路设计变得十分复杂,于是就让符号位也参与运算,从而产生了反码。 
  用反码计算, 出现了”0”这个特殊的数值, 0带符号是没有任何意义的。 而且会有[0000 0000]和[1000 0000]两个编码表示0。于是设计了补码, 负数的补码就是反码+1,正数的补码就是正数本身,从而解决了0的符号以及两个编码的问题: 用[0000 0000]表示0,用[1000 0000]表示-128。 
   注意-128实际上是使用以前的-0的补码来表示的, 所以-128并没有原码和反码。使用补码, 不仅仅修复了0的符号以及存在两个编码的问题, 而且还能够多表示一个最低数。 这就是为什么8位二进制, 使用补码表示的范围为[-128, 127]。

 

byte,short,int等类型的转换以及原理,原码,反码,补码_带符号

标签:short,反码,int,补码,1111,FF,0000,原码
From: https://blog.51cto.com/u_21817/6066945

相关文章

  • 关于CMCC连接后显示无Internet解决方法
    (1)(2)(3) ......
  • SMU Winter 2023 Round #13
    B.BM算日期题意:就是给定两个整数n,k,n是第一个日期,n+k是第二个日期,如果n+k>9999,那么9999-(n+k-9999)是第二个日期,算这两个日期中有多少个闰年。思路:首先根据题目规则得到......
  • SMU Winter 2023 Round #14
    A.解开束缚缠丝Ⅱ题意:给出n个字母(含大小写),求它们能构成最长回文串的长度。思路:找到里面成对的字符串有多少,然后如果有多出来的就+1,如果没有了就不加了,如果有三个只能算......
  • internet
     1、因特网互联网因特网是"Internet”的中文译名,它起源于美国的五角大楼,它的前身是美国国防部高级研究计划局(ARPA)主持研制的ARPAnet。阿帕网于1969年正式启用,当时仅......
  • Wintel联盟:Windows+Intel  PC时代的“双霸主神话”
     正所谓,时势造英雄。 1981年8月12日,IBM公司正式推出全球第一台个人电脑IBM5150。当时,IBM为了加速研发进度一改公司传统,IBM5150采用通用标准部件,开放除BIOS以外的......
  • 多线程计数 AtomicInteger
    大家在工作中肯定遇到过计数统计需求,单线程的情况下count直接定义int型就行,可是在多线程并发下会产生多个线程同时count++的情况,那么这种情况就需要用到AtomicInteger来保......
  • Intel CPU发展简史
    1971年:40041971年11月15日,Intel公司的工程师霍夫发明了世界上第一个商用微处理器—4004,从此这一天被当作具有全球IT界里程碑意义的日子而被永远的载入了史册。这款4位微......
  • c语言中printf不输出任何东西?,缓冲区未满不输出任何东西
    下面代码为什么没有任何输出:#include<cstdio>#include<unistd.h>intmain(intargc,char**argv){while(1){sleep(1);pri......
  • 软件测试|超好用超简单的Python GUI库——tkinter
    前言如果我们想要使用Python创建一个GUI界面,我们应该使用哪个库?Python有没有实现这个功能的库?答案是肯定的,Python的库这么多,肯定有实现上述功能的库,那么我们应该使用哪一......
  • Declaring InternalsVisibleTo in the csproj
    原文:DeclaringInternalsVisibleTointhecsproj-Meziantou'sblogWhileIprefertestingthepublicAPIofanassembly,it'ssometimesusefultotesttheimple......