Explique qué sucede exactamente cuando se ejecutan las siguientes secciones de código:
int a='\15';
System.out.println(a);
esto imprime 13;
int a='\25';
System.out.println(a);
esto imprime 21;
int a='\100';
System.out.println(a);
esto imprime 64.
int a='\15'
primero crea unchar
número octal basado en "15" (decimal 13, como carácter, es el "retorno de carro" ascii), que luego se convierte en unint
número entero. Esto es legal ya que los caracteres son enteros de 16 bits, por lo que es un upcast seguro y Java no emite avisos sobre el casting. Las otras respuestas ya cubren todo el asunto octal / decimal.Respuestas:
Ha asignado un carácter literal, que está delimitado por comillas simples, por ejemplo
'a'
(a diferencia de un literal de cadena, que está delimitado por comillas dobles, por ejemplo"a"
) a unaint
variable. Java realiza una conversión de ampliación automática de 16 bits sin firmarchar
a 32 bits firmadosint
.Sin embargo, cuando un carácter literal es una barra invertida seguida de 1 a 3 dígitos, es una representación octal ( base / raíz 8) del carácter. Así:
\15
= 1 × 8 + 5 = 13 (un retorno de carro; igual que'\r'
)\25
= 2 × 8 + 5 = 21 (un carácter NAK - reconocimiento negativo)\100
= 1 × 64 + 0 × 8 + 0 = 64 (el símbolo @; igual que'@'
)Para obtener más información sobre caracteres literales y secuencias de escape, consulte las secciones de JLS:
Citando el BNF de 3.10.6:
OctalEscape: \ OctalDigit \ OctalDigit OctalDigit \ ZeroToThree OctalDigit OctalDigit OctalDigit: one of 0 1 2 3 4 5 6 7 ZeroToThree: one of 0 1 2 3
fuente
1-3 digits
- debería haber sido0-3
. Y es para octal de 3 dígitos, octal de dos dígitos todavía puede tener de0-7
. ex. '\ 77' sigue siendo válido.La notación
\nnn
denota un código de carácter octal en Java. por lo queint a = '\15'
asigna el valor auto-emitido del carácter octal 15 ala
cual es el decimal 13.fuente
\nnn
no no denotan un número octal en Java. En el código de OP, denota una secuencia de escape de carácter octal. Las comillas circundantes son esenciales. A continuación, la asignación amplía el carácter a un valor entero. (Los números octales se indican con un dígito cero a la izquierda.)El hecho de que ponga los dígitos entre comillas me hace sospechar que está interpretando el número como un carácter literal. Los dígitos que siguen deben estar en octal.
fuente