黑马程序员技术交流社区

标题: 大家帮忙看一下代码,我算出来是15,运行却是65,怎么算的? [打印本页]

作者: 20140829    时间: 2014-10-11 13:25
标题: 大家帮忙看一下代码,我算出来是15,运行却是65,怎么算的?

  1. public class OperateDemo3 {
  2.         public static void main(String[] args) {
  3.                 int num=26;
  4.                 int n1=num&15;
  5.                 System.out.println(n1>9?(char)(n1-10+'A'):n1);
  6.         }
  7. }
复制代码



作者: 奋发吧小白    时间: 2014-10-11 13:41
n1 = num&15  n1的值为10
10>9
所以执行(n1-10+'A')
作者: dreamseekerkun    时间: 2014-10-11 13:44
26&15等于10,‘A’的ASCII值就是65啊,怎么会是15呢
作者: 20140829    时间: 2014-10-11 13:49
dreamseekerkun 发表于 2014-10-11 13:44
26&15等于10,‘A’的ASCII值就是65啊,怎么会是15呢

额,原来如此,多谢,那怎么算出A的ASCII呢?
作者: atlas    时间: 2014-10-11 13:56
首先26转化为二进制数是00011010 , 15转化为二进制数是00001111,
两个数做&操作,结果为00001010,把结果转化为二进制数是10,即n1为10.
因为10>9所以三元运算取前面的值,即(10-10+'A'),又因字符A转化为数字是65,
即结果为65.


作者: atlas    时间: 2014-10-11 14:01
字母A对应的ASSCII值可以在对就的ASSCII码表中找到。
作者: liuxiang    时间: 2014-10-11 14:07
20140829 发表于 2014-10-11 13:49
额,原来如此,多谢,那怎么算出A的ASCII呢?

ASCII是直接定义好的,打印字符A时转换成int型就是了
作者: 20140829    时间: 2014-10-11 14:48
atlas 发表于 2014-10-11 13:56
首先26转化为二进制数是00011010 , 15转化为二进制数是00001111,
两个数做&操作,结果为00001010,把结果 ...

ASCll直接定义好的,不用算是吧?那不得把表记住啊
作者: atlas    时间: 2014-10-11 15:02
20140829 发表于 2014-10-11 14:48
ASCll直接定义好的,不用算是吧?那不得把表记住啊

不用全记住,只记住一些常用的比如A=65,a=97。如果你要推算C=?,只需65+(A到C的距离)2=67即可。
a=A+32,其他一些不常用的不用记。
你以后慢慢就知道了,一般只会出现大小写字母的ASCII的值,其他的基本不出现。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2