🍕🍕计算机中不同进制的使用说明(整数)
二进制(binary):0,1,以0b或0B开头。
十进制(decimal):0-9。
八进制(octal):0-7,以0开头
十六进制(hex):0-9,A-F;以0x或0X开头。此处A-F不区分大小写。
🍷进制也可以调用方法进行转换
🍷测试:
class BinaryTest{
public static void main(String[] args)
{
int num1 = 0b110;
int num2 = 110;
int num3 = 0127;
int num4 = 0x110A;
System.out.println("num1 = " + num1);
System.out.println("num2 = " + num2);
System.out.println("num3 = " + num3);
System.out.println("num4 = " + num4);
}
}
结果如下:(注意进制,num1是二进制,num2是十进制,num3是八进制,num4是十六进制)
🍷解决之前一个问题
代码如下:
class BinaryTest{
public static void main(String[] args)
{
int i1 = 128;
byte b = (byte)i1;
System.out.println(b);
}
}
结果如下:是-128
为什么呢?
众所周知,计算机中数据以补码形式存放
int型(32位)的128在计算机中为
0000 0000 0000 0000 0000 0000 1000 0000
而强转为byte型(8位),直接截掉前面,保留八位,为 1000 0000,此时首位表示符号位,而不是数值,而补码为1000 0000 的数的十进制为-128,所以输出的是-128
🍷补充一个面试题
如何求一个0~255范围内整数的十六进制值,例如60的十六进制为3C?
方式一:自动实现
String str1 = Integer.toBinaryString(60);
String str2 = Integer.toHexString(60);
方式二:手动实现,思路二进制四位一组
int i1 = 60;
int i2 = i1 &15//位运算,取出最低四位,这时应该是12
String j = (i2 >9)?(char)(i2-10+‘A’)+"" : i2+"";//把12变为C,加“” 目的是让这些都变成字符串
int temp = i1 >>>4;//把高四位右移变为低四位【不懂这个的话看一下第十篇运算符,链接:https://blog.csdn.net/xxq1415286/article/details/104896721】
String j = (i2 >9)?(char)(i2-10+‘A’)+"" : i2+"";//重复上上步操作,完成高四位的转换
System.out.println(k+""+j)//j与k做连接运算