FWIW,所有值实际上都在机器内的基数2(我打赌你已经知道了).它只显示为基数10,因为字符串转换在基数10中创建字符串表示(例如,当您打印时),因为类似parseLong的方法假设输入字符串在基数10中,并且因为编译器希望所有文字在您实际写入时都在基数10中码.换句话说,一切都是二进制的,计算机只是为了方便我们人类而将东西转换成基础10.
因此,我们应该能够轻松地将输出基数更改为10以外的值,从而在基数9中获得相同值的字符串表示.在Java中,这是通过将可选的额外基本参数传递给Long.toString方法来完成的.
long x=10;
System.out.println(Long.toString(x,9));
Run Code Online (Sandbox Code Playgroud)
Long base10 = 10;
Long.valueOf(base10.toString(), 9);
Run Code Online (Sandbox Code Playgroud)
"转换为基数9而不转换为字符串"实际上意味着什么?
Base-9,base-10,base-2(二进制),base-16(十六进制),只是表示数字的方法.值本身并不取决于您如何表示它.int x = 256就int x = 0xff编译器而言,它完全相同.
如果你不想"转换为字符串"(我读这意味着你不关心值的表示),那么你想要做什么呢?