day02 进制转换、强制转换、运算符、原码反码补码

  • JavaSE
  • JavaSE
约 3112 字

进制转换

十进制转二进制

十进制整数转换为二进制整数十进制整数转换为二进制整数采用 " 除 2 取余,逆序排列 " 法。具体做法是:用 2 整除十进制整数,可以得到一个商和余数;再用 2 去除商,又会得到一个商和余数,如此进行,直到商为 0 时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

例如:十进制 37 转换成二进制过程如下

image-20230309221957755

最终得到 37 的二进制表示方式为:100101

二进制转十进制

从右到左用二进制的每个数去乘以 2 的相应次方(位权)并递增,然后将所有数字相加得到十进制数,例如二进制数:1000101 对应的位权如下图所示

image-20230309222014188

计算过程为:

image-20230309222021262

因为 0 乘以任何数结果都为 0,所以数字是 0 的位就可以不用计算,以上可以简化为:

image-20230309222029195

分别计算得到

image-20230309222041113

最终结果为:69

  • 位权:

某进制计数制中各位数字符号所表示的数值表示该数字符号值乘以一个与数字符号有关的常数,该常数称为 " 位权 " 。位权的大小是以基数为底,数字符号所处的位置的序号为指数的整数次幂。例如:十进制数的百位、十位、个位、十分位的权分别是 10 的 2 次方、10 的 1 次方、10 的 0 次方。

八进制

image-20210823121408909

十六进制

image-20210823121542595

ascall 码表

  • 48-57 为数字
  • 65-90 为大写字母
  • 97-122 为小写字母
Bin(二进制)Oct(八进制)Dec(十进制)Hex(十六进制)缩写/字符解释
0000 00000000x00NUL(null)空字符
0000 00010110x01SOH(start of headline)标题开始
0000 00100220x02STX (start of text)正文开始
0000 00110330x03ETX (end of text)正文结束
0000 01000440x04EOT (end of transmission)传输结束
0000 01010550x05ENQ (enquiry)请求
0000 01100660x06ACK (acknowledge)收到通知
0000 01110770x07BEL (bell)响铃
0000 100001080x08BS (backspace)退格
0000 100101190x09HT (horizontal tab)水平制表符
0000 1010012100x0ALF (NL line feed, new line)换行键
0000 1011013110x0BVT (vertical tab)垂直制表符
0000 1100014120x0CFF (NP form feed, new page)换页键
0000 1101015130x0DCR (carriage return)回车键
0000 1110016140x0ESO (shift out)不用切换
0000 1111017150x0FSI (shift in)启用切换
0001 0000020160x10DLE (data link escape)数据链路转义
0001 0001021170x11DC1 (device control 1)设备控制 1
0001 0010022180x12DC2 (device control 2)设备控制 2
0001 0011023190x13DC3 (device control 3)设备控制 3
0001 0100024200x14DC4 (device control 4)设备控制 4
0001 0101025210x15NAK (negative acknowledge)拒绝接收
0001 0110026220x16SYN (synchronous idle)同步空闲
0001 0111027230x17ETB (end of trans. block)结束传输块
0001 1000030240x18CAN (cancel)取消
0001 1001031250x19EM (end of medium)媒介结束
0001 1010032260x1ASUB (substitute)代替
0001 1011033270x1BESC (escape)换码 (溢出)
0001 1100034280x1CFS (file separator)文件分隔符
0001 1101035290x1DGS (group separator)分组符
0001 1110036300x1ERS (record separator)记录分隔符
0001 1111037310x1FUS (unit separator)单元分隔符
0010 0000040320x20(space)空格
0010 0001041330x21!叹号
0010 0010042340x22"双引号
0010 0011043350x23#井号
0010 0100044360x24$美元符
0010 0101045370x25%百分号
0010 0110046380x26&和号
0010 0111047390x27'闭单引号
0010 1000050400x28(开括号
0010 1001051410x29)闭括号
0010 1010052420x2A*星号
0010 1011053430x2B+加号
0010 1100054440x2C,逗号
0010 1101055450x2D-减号/破折号
0010 1110056460x2E.句号
0010 1111057470x2F/斜杠
0011 0000060480x300字符 0
0011 0001061490x311字符 1
0011 0010062500x322字符 2
0011 0011063510x333字符 3
0011 0100064520x344字符 4
0011 0101065530x355字符 5
0011 0110066540x366字符 6
0011 0111067550x377字符 7
0011 1000070560x388字符 8
0011 1001071570x399字符 9
0011 1010072580x3A:冒号
0011 1011073590x3B;分号
0011 1100074600x3C<小于
0011 1101075610x3D=等号
0011 1110076620x3E>大于
0011 1111077630x3F?问号
0100 00000100640x40@电子邮件符号
0100 00010101650x41A大写字母 A
0100 00100102660x42B大写字母 B
0100 00110103670x43C大写字母 C
0100 01000104680x44D大写字母 D
0100 01010105690x45E大写字母 E
0100 01100106700x46F大写字母 F
0100 01110107710x47G大写字母 G
0100 10000110720x48H大写字母 H
0100 10010111730x49I大写字母 I
010010100112740x4AJ大写字母 J
0100 10110113750x4BK大写字母 K
0100 11000114760x4CL大写字母 L
0100 11010115770x4DM大写字母 M
0100 11100116780x4EN大写字母 N
0100 11110117790x4FO大写字母 O
0101 00000120800x50P大写字母 P
0101 00010121810x51Q大写字母 Q
0101 00100122820x52R大写字母 R
0101 00110123830x53S大写字母 S
0101 01000124840x54T大写字母 T
0101 01010125850x55U大写字母 U
0101 01100126860x56V大写字母 V
0101 01110127870x57W大写字母 W
0101 10000130880x58X大写字母 X
0101 10010131890x59Y大写字母 Y
0101 10100132900x5AZ大写字母 Z
0101 10110133910x5B[开方括号
0101 11000134920x5C\反斜杠
0101 11010135930x5D]闭方括号
0101 11100136940x5E^脱字符
0101 11110137950x5F_下划线
0110 00000140960x60`反引号
0110 00010141970x61a小写字母 a
0110 00100142980x62b小写字母 b
0110 00110143990x63c小写字母 c
0110 010001441000x64d小写字母 d
0110 010101451010x65e小写字母 e
0110 011001461020x66f小写字母 f
0110 011101471030x67g小写字母 g
0110 100001501040x68h小写字母 h
0110 100101511050x69i小写字母 i
0110 101001521060x6Aj小写字母 j
0110 101101531070x6Bk小写字母 k
0110 110001541080x6Cl小写字母 l
0110 110101551090x6Dm小写字母 m
0110 111001561100x6En小写字母 n
0110 111101571110x6Fo小写字母 o
0111 000001601120x70p小写字母 p
0111 000101611130x71q小写字母 q
0111 001001621140x72r小写字母 r
0111 001101631150x73s小写字母 s
0111 010001641160x74t小写字母 t
0111 010101651170x75u小写字母 u
0111 011001661180x76v小写字母 v
0111 011101671190x77w小写字母 w
0111 100001701200x78x小写字母 x
0111 100101711210x79y小写字母 y
0111 101001721220x7Az小写字母 z
0111 101101731230x7B{开花括号
0111 110001741240x7C\垂线
0111 110101751250x7D}闭花括号
0111 111001761260x7E~波浪号
0111 111101771270x7FDEL (delete)删除

自动类型转换 (隐式类型转换) 和强制类型转换 (显式类型转换)

package note;

public class ConversionNote {

    public static void main(String[] args) {
        byte b = 1;
        byte b1;
        byte b2 = 3;

        int i = 2;
        int i1;
        final int i2 = 100;
        final int i3 = 27;

        i1 = b + i;//进行了自动转换(隐式类型转换),小变大。byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double
        System.out.println(i1);//3

        b1 = (byte) (b + i);//(b+i)结果为int,为了放入b1中,进行了强制类型转换(显式类型转换),将int强制变为byte,可能造成精度损失
        System.out.println(b1);//3

        b2 += 1;// += 是一个运算符,只运算一次,并带有强制转换的特点,也就是说 s += 1 就是 s = (short)(s + 1)
        System.out.println(b2);//4

        //所有的byte、short、char运算前都会转换为int
        //b1 = b+b2;//将报错

        //数字为常数,当右侧常量的计算结果在被赋值的变量范围中时,将不会进行变量的自动转换(编译器的常量优化)
        b1 = 1 + 2;//不会报错

        b1 = 1 + i;//变量不能进行常量优化

        //以下代码将不会报错
        b1 = i2 + i3;//被final修饰的int为常量,当右侧表达式为常量,由于右侧没有超过左侧的范围,编译器自动强制转换(生成的字节码文件会自动补充(byte)),这称为编译器的常量优化
        System.out.println(b1);
    }
}

运算符

算术运算符

操作符描述例子
+加法 - 相加运算符两侧的值A + B 等于 30
-减法 - 左操作数减去右操作数A – B 等于 -10
*乘法 - 相乘操作符两侧的值A * B 等于 200
/除法 - 左操作数除以右操作数B / A 等于 2
取余 - 左操作数除以右操作数的余数B%A 等于 0

赋值运算符

操作符描述
=简单的赋值运算符,将右操作数的值赋给左侧操作数
+ =加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数
- =减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数
* =乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数
/ =除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数
%=取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数

关系运算符

运算符描述
==检查如果两个操作数的值是否相等,如果相等则条件为真。
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。
>检查左操作数的值是否大于右操作数的值,如果是那么条件为真。
<检查左操作数的值是否小于右操作数的值,如果是那么条件为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。

逻辑 (短路) 运算符

操作符描述
&&称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。
\\称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。
!(单目运算符)称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为 true,则逻辑非运算符将得到 false。

位运算符

操作符描述
&(按位与)如果相对应位都是 1,则结果为 1,否则为 0
\如果相对应位都是 0,则结果为 0,否则为 1
^如果相对应位值相同,则结果为 0,否则为 1
<<按位左移运算符。左操作数按位左移右操作数指定的位数。
>>(有符号右移)按位右移运算符。左操作数按位右移右操作数指定的位数。最高位补符号位
<<<按位左移运算符。左操作数按位左移右操作数指定的位数。
>>>(无符号右移)按位右移运算符。左操作数按位右移右操作数指定的位数。最高位补 0

自增自减运算符

操作符描述
++(单目运算符,一个数据即可参与运算)自增: 操作数的值增加 1
--(单目运算符)自减: 操作数的值减少 1

三元运算符

表达式 ? 值 1 : 值 2

intanceof

intanceof 为 java 中的二元运算符,用来判断某个对象是否属于某个类或其子类,返回布尔值。例如:new Integer() instanceof Integer

源码反码补码

十进制源码反码补码
30000 0000 0000 00110000 0000 0000 00110000 0000 0000 0011
-51000 0000 0000 01011111 1111 1111 10101111 1111 1111 1011
-21000 0000 0000 00101111 1111 1111 11011111 1111 1111 1110
上次编辑于:
贡献者: Noby338,noby