范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

关于二进制的计算方法和原码反码补码等操作

  原码、反码、补码1 什么是原码反码补码 按照二进制进行存储 运算:按照二进制补码方式参与运算  原码:通过8421码快速计算数据大小(推荐使用计算器) 直观的看数据的大小 反码:在转换补码的过程中的中间值 补码:参与运算  2 有符号数表示法怎么做 有符号数:数据有正负之分就是有符号数, 数据无正负之分就是无符号数 例如: +7 -7  有符号数的组成: 符号位+数值位 例如 int a=+7; 所占字节数4b 32位 第一个0就是符号位 0表示正数 1表示负数 0 0000000 00000000 00000000 00000111  回顾: int表示范围 2的32次方个数 -2的31次方 到 +2的31次方-1 //有一位是符号位 所以31次方  那么+7 和 -7在计算机中如何存储  代码表示: //int a=+7; int a=0b00000000000000000000000000000111; //原反补 一样 System.out.println(a); //十进制表示形式 7  //int b=-7; int a=0b10000000000000000000000000000111; System.out.println(a);//十进制表示形式 -2147483641 /* 如何表示: 是负数所以符号位是1 0b10000000000000000000000000000111 ? 十进制表示是 -2147483641 并没有显示-7  解释:计算机存储有符号数是按照补码的形式存进去的. 0b10000000000000000000000000000111 不是补码 -7是原码  总结: 1,计算机存储有符号数都是按照补码的形式存储的 2,正数的原码,反码,补码都是一样的 3,负数的原码,反码,补码不一样,  所以如果你直接写int b=-7 计算机会帮你把它转成补码存储 0b10000000000000000000000000000111这个数据是-7的原码 如果你存储这个数据计算机就会把该数据当成补码去存 (该数据是-7的原码 会被认为是其他数据通过计算之后的补码)  原: 符号位+数值位(数据的绝对值) 反: 除了符号位不变 其它全部是1变0,0变1 补: 在反码的基础上+1;  再次计算-7 原: 0b10000000000000000000000000000111 反: 0b11111111111111111111111111111000 补: 0b11111111111111111111111111111001 //+1  */ int b=0b11111111111111111111111111111001; System.out.pirintln(b);// 会帮你转换成原码然后再显示十进制 -7; /* 计算机存的时候是存的0b11111111111111111111111111111001 在输出十进制显示的时候要回推成十进制的-7 1,补码-1 得到反码 0b11111111111111111111111111111001 -1 0b11111111111111111111111111111000 2,剩下符号位不变其余 1变0,0变1 0b10000000000000000000000000000111 */三、位逻辑运算符1、概念
  位运算:(二进制位或者是bit位) 计算机中所有的计算到计算机底层中都会变成位运算(二进制位的运算) 位运算可以提高程序的效率,而且以后我们研究jdk或者某些框架的原码里边有很多地方都会用到位运算  2、分类
  双目运算符:连接两个操作数 &: 按位与 规则: 两个同为1时候才为1 |: 按位或 规则: 两个中只要有一个为1结果就是1 ^: 按位异或 规则: 两个中不同为1 相同为0
  单目运算符: 操作数只有一个 ~: 按位取反 规则: 1变0,0变1(包括符号位在内)
  注意:位运算连接的操作数是--数值类型(二进制) 位运算表达式的结果是--数值类型  1 按位与 & 规则: 两个同为1时候才为1 // 3 & 4 的结果 分析: /* 1 要先转换成二进制位 并且全是二进制的补码形式! //正数原反补 一样 3 补码 0b00000000000000000000000000000011 4 补码 0b00000000000000000000000000000100 2 操作 ------------------------------------ 结果0b00000000000000000000000000000000 //十进制也就是0  */ int a=3&4; System.out.println(a);  2 按位或 | 规则: 两个中只要有一个为1结果就是1 // 3 | 4 的结果 /* 1 要先转换成二进制位 并且全是二进制的补码形式! //正数原反补 一样 3 补码 0b00000000000000000000000000000011 4 补码 0b00000000000000000000000000000100 2 操作 ----------------------------------- 结果 0b00000000000000000000000000000111 //十进制也就是7  */ int a=3|4; System.out.pirintln(a);  3 按位异或 ^ 规则: 两个中不同为1 相同为0 // 3 ^ 4 的结果 /* 1 要先转换成二进制位 并且全是二进制的补码形式! //正数原反补 一样 3 补码 0b00000000000000000000000000000011 4 补码 0b00000000000000000000000000000100 2 操作 ----------------------------------- 结果 0b00000000000000000000000000000111 //十进制也就是7  */ int a=3^4; System.out.println(a);  一个数据对相同的数据异或两次其值不变 a两次异或b结果不变 a^b^b==a  int a=3; int b=4; System.out.println(a^b^b);  /* 3 补码 0b00000000000000000000000000000011 4 补码 0b00000000000000000000000000000100 -------------------------------------------- 第一次异或不同为1 相同为0 结果 0b00000000000000000000000000000111 4 0b00000000000000000000000000000100 --------------------------------------------第二次异或不同为1 相同为0 0b00000000000000000000000000000011 //补码 3 */  4 按位取反 1变0,0变1(包括符号位在内) // ~3 的结果 /* 1 要先转换成二进制位 并且全是二进制的补码形式! //正数原反补 一样 3 补码 0b00000000000000000000000000000011 2 操作 -----------------------------------补码按位取反还是补码 结果 0b11111111111111111111111111111100 //补码 //首先符号位是1 是负数 其次 这是补码 要算反码  现在已知道补码求原码 补码:0b11111111111111111111111111111100 - 1 --------------------------------------- 反码:0b11111111111111111111111111111011 //符号位不变 取反 原码:0b10000000000000000000000000000100 //原码 十进制显示 -4 */ int a=~3; System.out.println(a);  5 互为取反 int a = ~6; System.out.println(a);//-7 //0b00000000000000000000000000000110 +6 //0b11111111111111111111111111111001 取反:结果是负数 是补码 //0b11111111111111111111111111111000 反码 //0b10000000000000000000000000000111 原码:-(1+2+4)=-7 //6取反就是-7 那么-7取反呢 System.out.println(~-7);//6 //0b10000000000000000000000000000111 -7原码 //0b11111111111111111111111111111000 -7反码 //0b11111111111111111111111111111001 -7补码 //0b00000000000000000000000000000110 -7取反 结果是整数 2+4=63、案例:数据交互
  需求:
  已知两个整数变量a = 10,b = 20,使用程序实现这两个变量的数据交换;不允许出现第三方变量
  思路:
  使用异或,一个数据对相同的数据异或两次其值不变
  代码:  public static void main(String[] args) { int a = 10; int b = 20; a = a ^ b;//a = 10 ^ 20; b = a ^ b;//b = 10 ^ 20 ^ 20; a = a ^ b;//a = 10 ^ 20 ^ 10; System.out.println(a); System.out.println(b); }
  注意: 以后编码中,更多的还是选择定义第三方变量  四、位移运算符1、分类位移运算符的分类 <<: 左移 规则:让操作数乘以2的n次幂 n是移动的位数 >>: 右移 规则:让操作数除以2的n次幂 n是移动的位数 >>>:无符号右移 规则:让操作数除以2的n次幂 n是移动的位数xxxxxxxxxx # 四、位移运算符## 1、分类位移运算符的分类 <<: 左移 规则:让操作数乘以2的n次幂 n是移动的位数 >>: 右移 规则:让操作数除以2的n次幂 n是移动的位数 >>>:无符号右移 规则:让操作数除以2的n次幂 n是移动的位数java2、左位移操作 <<规则:让操作数乘以2的n次幂 n是移动的位数 左边符号位丢弃 右边补0 格式: 操作数<<往左位移的位数 (操作的是二进制位) int a=3<<2; //操作数 3*2^2 =3*4=12 System.out.println(a); /* 补码 0b00000000000000000000000000000011 位移 0b000000000000000000000000000011 右边空出两位补0 左边的两位就被挤掉了 结果:0b00000000000000000000000000001100 符号位是0 是正数 原反补一致 //十进制表示 12 */  负数左移 int b=-3<<2; System.out.println(b); /* -3 原码 0b10000000000000000000000000000011 反码 0b11111111111111111111111111111100  补码 0b11111111111111111111111111111101 左移 0b111111111111111111111111111101  补齐:0b11111111111111111111111111110100 补码 -1 反码 0b11111111111111111111111111110011 原码 0b10000000000000000000000000001100 原码 1100=-12 */  int i=21; //00000000000000000000000000010101 int x1=i<<2; //21*2^2=84 //00000000000000000000000001010100 =4+16+64=84 int x2=i<<3; //21*2^3=168 //00000000000000000000000010101000 =8+32+128=168 int x3=i<<26;//21*2^26=1409286144 //01010100000000000000000000000000 int x4=i<<27;//21*2^27=-1476395008 //10101000000000000000000000000000 变成负数了  int i=-21; //10000000000000000000000000010101 原码 //11111111111111111111111111101010 反码 //11111111111111111111111111101011 补码(反码+1)  int x1=i<<2; //-21*2^2=-84 //11111111111111111111111111101011 补码 //11111111111111111111111110101100 位移补0 求原码 //11111111111111111111111110101011 反码 //10000000000000000000000001010100 原码 结果是 4+16+64=84 符号是1 结果是-84  int x2=i<<3; //-21*2^3=-168 int x3=i<<26;//-21*2^26=-1409286144 int x4=i<<27;//-21*2^27=1476395008 //11111111111111111111111111101011 补码 //01011000000000000000000000000000 位移27位 补0 符号位0 变成正数 结论: << 在一定的范围内每向左移动移动一位相当于 *2   最高效的计算 2*8 2<<3 或者 8<<13、右位移操作 >>规则:让操作数除以2的n次幂 n是移动的位数 格式: 操作数>>往右位移的位数 (操作的是二进制位) int a=32>>2; //操作数 32/2^2 =32/4=8 System.out.println(a); /* 32补码 0b00000000000000000000000000100000 位移 0b000000000000000000000000001000 左边边空出两位补0(符号位是啥补啥) 右边的两位就被挤掉了 结果:0b00000000000000000000000000001000 符号位是0 是正数 原反补一致 //十进制表示 8 */  负数情况 int b=-32>>2; //操作数 -32/2^2 =-32/4=-8 System.out.println(a);  /* -32原码: 0b10000000000000000000000000100000 取反 反码: 0b11111111111111111111111111011111 (符号位不变 其他1变0 0变1) + 1 补码: 0b11111111111111111111111111100000  右位移: 0b111111111111111111111111111000 左边边空出两位补1(符号位是啥补啥 现在符号位是1 补1) 右边的两位就被挤掉了 结果补码:0b11111111111111111111111111111000 //这个也是补码  当输出显示的时候要回推显示原码形式 0b11111111111111111111111111111000 - 1 反码:0b11111111111111111111111111110111 原码:0b10000000000000000000000000001000 //十进制表示 -8  */ int i=21; //00000000000000000000000000010101 int x1=i>>2; //00000000000000000000000000000101 1+4=5 int x2=i>>3; //00000000000000000000000000000010 2=2; int x3=i>>26;//00000000000000000000000000000000 0 int x4=i>>27;//00000000000000000000000000000000 0   int i=-21; //10000000000000000000000000010101 原码 //11111111111111111111111111101010 反码 //11111111111111111111111111101011 补码(反码+1)  int x1=i>>2; //11111111111111111111111111101011 补码 //11111111111111111111111111111010 右移2位 符号位是啥补啥 已知补码求原码先求反码(补码-1) //11111111111111111111111111111001 反码 //10000000000000000000000000000110 //结果是 2+4=6 符号位是1是负数 =-6 int x2=i>>3; //-3 int x3=i>>26; //-1 int x4=i>>27; //-1 //11111111111111111111111111101011 补码 //11111111111111111111111111111111 右移27位 符号位是啥补啥 已知补码求原码先求反码(补码-1) //11111111111111111111111111111110 反码 //10000000000000000000000000000001 结果是 1 符号位是1是负数 =-1  结论: >> 在一定的范围内每向右移动移动一位相当于 / 24、无符号右移: >>>

套现1300亿!大众汽车卖保时捷股票,加码新能源?保时捷市值反超大众,位居全球车企第四大众汽车减持保时捷股权,获得大量资金!路透社近日报道,大众汽车通过出售世界著名跑车品牌保时捷优先股回收91亿欧元(约合人民币630亿元)资金,出售完成后,大众汽车持有保时捷优先股的今日油价2022年10月13日最新油价,92号95汽油,0号柴油价格今天的油价将会在10月24日晚调整,目前经过3个工作日的统计,原油变化率3。44,预计上调油价220元吨(0。17元升0。20元升),大家相互转告,下次油价很可能要上涨了。今日油价欧冠最新积分榜一夜3队出线,利物浦轰7球大胜,巴萨命悬一线今天凌晨,欧冠小组赛第4轮再战8场,那不勒斯主场42击败阿贾克斯,拜仁客场42击败比尔森胜利,两队豪取4连胜,双双出线利物浦客场71横扫格拉斯哥流浪者,再拿1分就能出线,萨拉赫上演早上刚刮了胡子,隔早就长出来了,胡须长太快说明了什么呢?胡须,俗称胡子,泛指生长于男性上唇下巴面颊两腮或脖子的毛发。青春期后的男性一般都会长胡子,是雄性激素作用的结果。在古代,无论中外,男子的胡须也被作为审美的对象,人们争相以美须眉为美油价调整最新消息国际油价连续3日下跌10日国际油价跌超1。6同样受到美元走强打压,周一国际油价从此前的涨势中转跌,截至收盘,纽约商品交易所11月交货的轻质原油期价跌幅为1。63,收于每桶91。13美元12月交货的伦敦二十大特刊最新的时尚叫新国货中国经济周刊记者侯隽北京报道MadeinChina!十年,这句中国人最熟悉的英文经历了两种翻译从中国制造到中国智造!一样的读音,不一样的是多了中国式自信,融入了匠人匠心,融入了国货CBA最新积分榜新疆险胜深圳登顶,马尚助广东大胜,山东击溃北控北京时间10月13日,CBA常规赛第二轮开打,在率先结束的三场比赛中,新疆9291险胜深圳,山东10493力擒北控,广东116102轻取同曦,目前在最新的积分榜上,新疆拿到两连胜排油价调整最新消息!10月13日,92号95号汽油,柴油最新油价好消息,国际油价连跌3天,昨日再跌2,让油价预期涨幅减少了50元吨。目前预测上调油价255元吨,仍远超上调标准线,呈现大涨状态。10月13日,新一轮油价统计周期内的第3个工作日,预nba季前赛回放76人VS黄蜂全场录像中文解说高清完整版北京时间10月13日,2022NBA季前赛继续进行,76人以9994击败黄蜂迎来4连胜收官。回看锁定观看录播戳这比赛开始,76人先得5分,罗西耶得分助攻肩扛,带领球队打出70的攻击前三季度重大水利工程开工数量创新高光明日报北京10月12日电(记者陈晨)水利部11日召开2022年前三季度水利基础设施建设进展和成效新闻发布会,水利部副部长刘伟平在会上表示,1至9月,全国新开工重大水利工程累计达4养老金新调整来了!70岁以上增加100元,可信吗?我国是一个真正意义上的人口大国,而从现实情况来看,当前我国人均收入还处在偏低状态,城乡二元经济发展失衡的问题依旧存在的。此外,随着当前国内人口结构的变化,我国所承担的养老负担也在不
苹果宣布下月将在部分国家提高AppStore应用和应用内购价格IT之家9月20日消息,苹果公司宣布,最早将于10月5日起,在智利埃及日本马来西亚巴基斯坦波兰韩国瑞典越南以及所有使用欧元的地区,苹果应用商店(AppStore)将提高应用程序和应特斯拉普工的待遇头条创作挑战赛最近被特斯拉的一条招聘普工的信息给惊讶到了,一直觉得特斯拉在国内能大力发展,成为头部汽车生产制造厂家,靠的是它得天独厚的美式基因,拥有众多新能源制造的专利,眼光长远从THNDRGames推出玩赚比特币纸牌手游区块先知这款名为ClubBitcoinSolitaire的新游戏旨在通过专门针对女性受众和新兴市场来提高比特币的普及率。ClubBitcoinSolitaire比特币游戏公司THNDRGa打造五大百亿级产业集群,阳春市工业发展突飞猛进党的十八大以来特别是近年来,阳江阳春市不断加快经济结构调整和产业结构优化,改变了以往两水一钢的粗放型工业模式,突出产业集群培育引领,聚焦区域特色优势产业,坚持引育结合促进产业发展,广州蚊子工厂每年放飞3。6亿只绝育蚊子,它们咬人不?作为世界上杀人最多的动物,蚊子每年会导致70多万人死亡,它们本身不致病,但是它们携带的登革热寨卡热疟疾黄热病乙型脑炎等80多种病毒,会通过叮咬传入人体内,最终导致死亡。据统计,全世大亚湾的出路在哪里?惠州市大亚湾区,是惠州土地面积最小的区之一,不到300平方公里给惠州贡献了800亿的生产总值,是惠州经济密度最高的区。西接临深圳,南面海,惠州港所在地,从地图看大亚湾跟深圳城建连城微信,支付宝和银行之间转账收取手续费,还有没有存在的必要?听网友抱怨提现需要收手续费。关于支付工具提现要收手续费,简直是流氓。就拿微信来说,说是因为银行收取了手续费,所以说要上调微信提现的手续费。可是立马遭到银行的批驳。说压根儿就没有收取江西推动社保卡一卡通用10月1日起正式实施9月21日,省政府新闻办省人社厅省政务服务办联合召开江西省社会保障卡一卡通条例新闻发布会。记者从会上获悉,江西省社会保障卡一卡通条例(以下简称条例)将于10月1日正式施行,是全国第银行秋招开启抢人大战这几类人才最抢手文万木金九银十招聘季,多家银行公布了2023年秋季招聘计划,拉开了秋季校园招聘的帷幕。从银行公布的招聘计划来看,虽然人才需求结构发生显著改变,但各大银行对金融科技人才的重视度及需求百年灵重振手动追针计时码表的雄风(百年灵维修)咱就是一个修表的,各种瑞士名表老上海北京等都可以维修的。每天分享各种名表小知识,就等帅哥美女来找我咨询。百年灵以其计时码表尤其是为飞行员设计的计时码表而今又推出了PremierHe18年后,你会成为什么样的人?过着什么样的生活?18年,意味着一个刚出生的小婴儿已经长大成年,18年,貌似很遥远的未来,我的18年,却猝不及防的来了,高考后的18年,就这么不声不响,悄然来临,确切的说,已经18年零2个月了,今天