一、十进制转换为十六进制
public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner sc = new Scanner(System.in); int decimalNumber = sc.nextInt(); String hexValue = ""; if (decimalNumber==0) { System.out.println(0); return; } while (decimalNumber != 0) { int remainder = decimalNumber % 16; char hexDigit = (char) (remainder < 10 ? remainder + '0' : remainder - 10 + 'A'); hexValue = hexDigit + hexValue; decimalNumber = decimalNumber / 16; } System.out.println(hexValue); }
难理解的地方:
remainder < 10 ? remainder + '0' : remainder - 10 + 'A'
:这是一个条件表达式(也称为三元运算符),用于根据余数的值选择要转换为十六进制的字符。
- 条件部分
remainder < 10
检查余数是否小于10。- 如果条件为真,即余数小于10,则执行
remainder + '0'
,其中'0'
表示ASCII码为48的字符0。这里将余数和字符0相加,得到对应的字符。- 如果条件为假,即余数大于等于10,则执行
remainder - 10 + 'A'
,其中'A'
表示ASCII码为65的字符A。这里将余数减去10,再与字符A相加,得到对应的字符。
Integer范围:[-2147483648, 2147483647]
//十进制转换十六进制字符串 String numHex = Integer.toHexString(num); System.out.println(numHex);
二、强制转换
- 类型转换都是小范围向大范围转换的,大范围往小范围转化需要用到强制转换,转换后的值会有所损失。
- 不同数据类型精度由小到大排列如下:
char-->byte --> short --> int --> long --> float --> double- 从double转换到float可能会有损失,所以解决方案就是在float类型的常量后面+F
三、杨辉三角
1
1 1
1 2 1
1 3 3 1
1 2 6 4 1
1.每行首尾都是1
2.每行数字左右对称
3.第n行的数字有n列
4.每列上的元素值 = 上一行当前列元素值 + 上一行上一列元素值