java基础(一)运算符、进制,二进制转十进制、位运算、原码,反码,补码

目录

一、算术运算符

二、关系运算符

三、位运算符

四、进制详解

五、原码、反码、补码


一、算术运算符

表格中的实例假设A = 20 ,B = 10

+加法 - 相加运算符两侧的值A + B 等于 30
-减法 - 左操作数减去右操作数A – B 等于 10
*乘法 - 相乘操作符两侧的值A * B等于200
/除法 - 左操作数除以右操作数A/B等于2     (下文举例)
取余 - 左操作数除以右操作数的余数A%B等于0   (下文举例)
++自增: 操作数的值增加1B++ 或 ++B 等于 21(区别详见下文)
--自减: 操作数的值减少1B-- 或 --B 等于 19(区别详见下文)

1、/ 除法  和 % 取余 举例

例如:一个三位数ABC;其中 A是百位数,B是十位数,C是个位数 ;   将这个三位数的值变位置 即BCA,如何获取BCA的值

        // 举例
        int d = 268;   
        d = d/10%10*100 + d%10*10 + d/100;
        System.out.println(d);   // 打印结果为:682

2、++    自增     

 (1)++前:如果一个表达式里面有多个操作,先执行++,在执行其他操作

        int a = 2;
        int b = ++a;             // ++在前,先算a = a + 1后,在把a赋值给b
        System.out.println(b);   // b的结果为:3

 (2)后++:如果一个表达式里面有多个操作,先执行其他操作,在执行++ 

        int a = 2;
        int b = a++;             // ++在后,先把a的值赋值给b后,在算a = a+1
        System.out.println(b);   // b的结果为:2

3、--    自减 

(1)-- 前:如果一个表达式里面有多个操作,先执行--,在执行其他操作

        int a = 2;
        int b = --a;             // --前,先算a = a - 1后,在把a赋值给b
        System.out.println(b);   // b的结果为:1

 (2)后 --:如果一个表达式里面有多个操作,先执行其他操作,在执行-- 

        int a = 2;
        int b = a--;             // 后--,先把a的值赋值给b后,在算a = a-1
        System.out.println(b);   // b的结果为:2

二、关系运算符

==检查如果两个操作数的值是否相等,如果相等则条件为真(A == B)为假
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真(A != B) 为真
检查左操作数的值是否大于右操作数的值,如果是那么条件为真(A> B)为假
检查左操作数的值是否小于右操作数的值,如果是那么条件为真(A <B)为真
>=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真(A> = B)为假
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真(A <= B)为真

三、位运算符

&    按位与 :将两个数字的二进制方式一一对应,如果对应位置数字都为1,结果对应                        位的就为1,否则为0(只要有一个0,结果对应位置的数字也为0)

        int n = 3;      //0011  3转四位数二进制
        int m = 6;      //0110  6转四位数二进制 
        int q = n & m;  //0010  3和6二进制一一对应,都为1时取1,否则取0 -->2转10,为2
        System.out.println(q);   // 打印结果为:2

|      按位或:对应位置只要有1,结果对应位置的数字就为1

        int n = 3;      //0011  3转四位数二进制
        int m = 6;      //0110  6转四位数二进制 
        int q = n | m;  //0111  -----> 2进制转10进制,为7
        System.out.println(q);   // 打印结果为:7

^     按位异或:对应位置的数字不一样,结果对应位置的数字就为1,否则为0

        int n = 3;      //0011  3转四位数二进制
        int m = 6;      //0110  6转四位数二进制 
        int q = n ^ m;  //0101  -----> 2进制转10进制,为5
        System.out.println(q);   // 打印结果为:5

~     按位取反:将原来的数字每一位取反,是1的地方变成0,是0变成1

        int abc = ~5;
        System.out.println(abc);   //结果为-6

四、进制详解

   十进制: 假设用三位数表示一个数字    逢10 进 1,每一位数值变化范围为0-9

                000

                001

                002

                ...

                009

                010

                ...

                099

                100

   二进制:逢2进1 ,每一位数值变化范围为0-1

                000

                001

                010

                011

                100

   八进制:逢8进1 , 每一位数值变化范围为0-7

                000

                001

                002

                003

                ...

                007

                010

  十六进制:逢16进1,每一位数值变化范围为0-F     F表示16

                000

                001

                002

                ...

                009

                00A       A表示10

                00B       B表示11

                ...

                00F       F表示15

                010       16

进制之间的转换

1、10进制转2进制

        10:13转换成2:13

        方法:用数字除以2取余,一直除以2,直到商为0为止,然后将得到的所有余数倒序

2、2进制转10进制

        1101011

        方法:计算每一位数字*2(位权),将所有的结果相加可以得到10进制的数字

        1*2(0)+ 1*2(1)+ 1*2(3)+1*2(5)+ 1*2(6) = 1+2+8+32+64 = 107

123 = 100 + 20 + 3 = 1*10(2) + 2*10(1) + 3*10(0)    位权

同理:

        10转8 :除8取余

        8转10:每一位*8(位权)+

        10转16:除16取余

        16转10:每一位*16(位权)+

3、2转8: 先转10再转8,一位8进制等价于3位二进制

参照表

8  -->          0          1              2            3            4           5            6          7

2  -->        000        001        010        011        100        101        110      111  

010 101 011 101 010 101   二进制转八进制----->   253525                      

47231  八进制转二进制--->100111010011001

4、2转16:一位16进制的数对应4位二进制

16:    0             1              2              3              4              5              6              7               8

2:   0000        0001        0010        0011        0100        0101        0110        0111        1000 

16:      9              A              B              C            D              E            F

2:     1001        1010        1011        1100        1101        1110        1111

0101 1110 1010 1101 0101  二进制转16进制--->  5EAD5

5、8转16:8先转2再转16

五、原码、反码、补码

每一个类型的变量在内存中所占的内存大小不一样

int          4B(4字节)    32b(32位)

char       2B  2字节        16b

short      2B  2字节        16b

long       8B  8字节         64b

float       4B  4字节         32b

double   8B  8字节         64b

byte       1B  1字节         8b

boolean 1B  1字节         8b

举例: int ABC =  ~5;   5的原码 // 00000000  00000000  00000000  00000101 

                                        5的反码 //  11111111    11111111    11111111    11111010  

int类型二进制位的最高位是符号位,0表示这个数字是正数,1表示负数

原码:正数的二进制表示方式,5的原码

           00000000  00000000  00000000  00000101 

反码:在原码的基础上取反

           11111111    11111111    11111111    11111010  

补码:补码在反码的基础上+1

           11111111    11111111    11111111    11111011

原码 ->按位取反 ->反码 ->+1 ->补码

补码 ->-1 ->反码 -> 取反->原码

正数在内存中是以原码的形式存储,如果想要读取该数字是多少,直接将二进制的原码转换成10进制的数字,就可以直接得到真实的数字

负数在内存中是以补码的形式存储,如果想要得到真实的数字是多少,需要先转换成原码,再转10进制

位运算符都是直接操作的内存

5:

原码       00000000  00000000  00000000  00000101 

通过取反将内存修改成了

反码       11111111    11111111    11111111    11111010       负数

       再次读取这个数字的时候计算看到最高位1:表示这个数字是负数,计算机就认为这个是补码

补码-1: 11111111    11111111    11111111    11111001       反码

取反得到原码:00000000  00000000  00000000  00000110       二进制转换成10进制得到 -6

     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值