进制和位运算
创始人
2024-03-27 01:30:12
0

本篇解释算法第一道题,原题在我的gitee中
https://gitee.com/xiao-baihao/algorithm-brushing/tree/master

首先在计算机中整型是32位的,也就是占4个字节 一个字节是8位
在java中整数都代表有符号整型
正数的最高位是0 负数是1
所有的算数运算符 + - * / % 都不是十进制的都是需要在背后转成位运算的二进制

特别注意在运算的过程中看的是补码 结果的过程看的是原码,负数 = 取反(~) + 1;

为什么要取反加1
还有java中最大的数和最小的数

有符号和无符号的区别

有符号数:用最高位最符号位,‘0’代表正数,‘1’代表负数,其余位用作数字位代表数值位。
无符号数:所有位都为数值位,无正负之分,亦无符号位

进制的转换

  1. 二进制转十进制
二进制转十进制:从最低位开始(右边低一位) 将每个位置上的数提出来,乘以2的(位数 -1)次方,然后把数加起来
一个字节有8位
0b0001011
1 * 2(1 - 1) + 1 * 2(2 - 1) + 0 * 2(3 - 1) + 1 * 2(4 - 1) = 11
  1. 八进制转十进制
八进制转十进制:从低位开始 将每个位置上的数提出来,乘以8的(位置 -1)次方,然后把数加起来
00000234
4 * 8(1 - 1) + 3 * 8(2 - 1) + 2 * 8(3 - 1) = 28 + 128 = 156
  1. 十六进制转十进制
十六进制转十进制:从低位开始 将每个位置上的数提出来,乘以16的(位置 -1)次方,然后把数加起来
十六进制有1-9 A-F (A-F代表 10—16)
0x代表的是16进制它是一个标识符
0x0000023A
10 * 16(1 - 1) + 3 * 16(2 -1) + 2 * 16(3 -1) = 570
  1. 十进制转二进制
 3400100010有一个凑数的方法:想好2的几次方是多少,比如说2^1(10)是2, 2^2(100)是4, 2^3(1000)是8, 2^4(10000)是16, 2^5是32,2^6是64, 2^7是128, 2^8是256, 2^9是512, 2^10 1024这样凑数的方法就可以得出 2^5 + 2^1 = 100000 + 10 = 100010可以利用这个方法算一个大的数2012可以拆成2^3 + 2^2 + 2^10 + 2^9 + 2^8 + 2^7 + 2^6 + 2^4= 4 + 8 + 1024 + 512 + 256 + 128 896 - 976 = 8010000000000100000000010000000010000000100000010000100010011111011100
  1. 十进制转成八进制
先转成二进制在转八进制
131 = 2^7 + 2^1 + 1 = 10000011
(10)(000)(011) = 203
  1. 二进制转八进制
2进制转八进制: 从低位开始将二进制每三位为一组,转成对应的八进制数即可,从后往前
10000011
(10)(000)(011) = 203
  1. 十进制转十六进制
十进制转成16进制
先转2进制在转16进制
131 = 2^7 + 2^1 + 1 = 10000011
  1. 二进制转十六进制
2进制转16进制:从低位开始将二进制每四位为一组,转成对应的16进制即可,从后往前
10000011
(1000)(0011) = 83
  1. 八进制转二进制
8进制转2进制,可以先转10进制然后在转2进制,16进制也一样

java中运算符

java中有7个运算符(&、|、^、~、>>、<<、>>>)

分别是 按位与&、按位或|、按位异或^、按位取反~

按位与&: 两位全为1,结果为1,否则为0

按位或|: 两位有一个1, 结果1, 否则为0

按位异或^: 两位一个为0,一个为1,结果为1 否则为0

按位取反~: 取反0和1

原码 补码 反码

  1. 二进制的高位是符号位:0表示正数,1表示负数
  2. 正数的原码 反码 补码都一样
  3. 负数的反码 = 它的原码符号位不变,其他位取反
  4. 负数的补码 = 它的反码 + 1, 负数的反码 = 负数的补码 -1
  5. 0的反码和补码都是0
  6. Java没有无符号数,java都是有符号数, 整数类型就代表有符号数
  7. 计算机运算的时候,都是以补码的方式来运算的
  8. 当我们看运算结果的时候,要看他的原码

位运算

>>、>>>、<<
1. 算术右移>>: 低位溢出,符号位不变,并用符号位补溢出的高位
2. 算数左移<<: 符号位不变,低位补零
3. >>> 逻辑右移也叫无符号右移,运算规则是:低位溢出,高位补0
没有 <<< 符号
案列:1. int a = 1 >> 2; 1 / 2 / 22. int b = 1 << 2; 1 * 2 * 2;
右移就是除以2,左移就是乘以2

例子

例子: 2&3、~-2、~2、2|3、^3
一、 2&3 首先要把十进制的数转换成原码也就是32为的2进制,一个字节是8位,一共有4个字节,然后在转成补码
2的原码 = 0000000000000000000000000000000010
2的补码 = 0000000000000000000000000000000010
3的原码 = 0000000000000000000000000000000011
3的补码 = 0000000000000000000000000000000011
(0000000000000000000000000000000010) & (0000000000000000000000000000000011)
结果:0000000000000000000000000000000010 = 2二、~-2
-2的原码 = 1000000000000000000000000000000010
-2的反码 = 1111111111111111111111111111111101
-2的补码 = 1111111111111111111111111111111110
~-2 = 0000000000000000000000000000000001
结果:0000000000000000000000000000000001 = 1三、~2
2的原码:0000000000000000000000000000000010
2的补码:0000000000000000000000000000000010
~2补码:1111111111111111111111111111111101
拿到反码:1111111111111111111111111111111100
拿到原码:1000000000000000000000000000000011
结果:1000000000000000000000000000000011 = 3

相关内容

热门资讯

锚定“十五五”开局 专家建言宏... 12月27日,中国社会科学院财经战略研究院、浙江财经大学共同举办的“财经战略年会(2025)暨第二届...
每周股票复盘:锴威特(6886... 截至2025年12月26日收盘,锴威特(688693)报收于37.41元,较上周的37.28元上涨0...
资深征地律师助力维权,孙侠律师 在征地拆迁领域,遇到专业、靠谱的律师至关重要。资深征地律师、出名征地律师的专业服务,能为当事人在复杂...
推动法律监督新格局走深走实 推动法律监督新格局走深走实 ——专访二级大检察官,天津市检察院党组书记、检察长陈凤超 天津市检察院...
鱼全翻着白肚皮,水还变黑了!养... 图片来源:摄图网 本文为《方圆》杂志原创稿件 这天,养鱼户陆大军发现 鱼塘里的鱼竟然全部翻着白肚皮,...
问法预告|遇到网络纠纷不知如何... 如今,互联网已经成为人们生活工作的重要场所,随着应用场景的增多,与互联网有关的纠纷也呈现上升趋势。从...
电商平台律师推荐:上海正策(杭... 在电商行业蓬勃发展的今天,各类法律问题也随之而来,选择一位靠谱的电商平台律师至关重要。那么,电商平台...
东城区“集贤人才”大会举办 发... 人民网北京12月28日电 (记者池梦蕊)12月27日,以“集贤东城·‘才’创未来”为主题的东城区“集...
闪评 | 日本内阁连曝政治资金... 当地时间12月26日,日本总务大臣林芳正公开道歉,原因在于其竞选团队向山口县选举管理委员会提交的去年...
不靠美政府建高铁了!加州撤回起... 央视记者当地时间12月27日获悉,美国加利福尼亚州已正式撤回此前针对美联邦政府的诉讼,不再挑战联邦政...