一、基本知识
1.与或非三个逻辑运算符的优先级是怎么排列的?
“非”优先级最高,”与”其次,”或”优先级最低
2.原码,反码,补码分别是什么意思?
· 原码:将数字转换为二进制,第一位为符号位,正数为0,负数为1
例如:12的原码是00001100 -12的原码是10001100
· 反码:正数的反码和原码相同,负数的反码将原码符号位之外的位逐位取反
例如:12的反码是00001100 -12的反码是11110011
· 补码:正数的补码和原码相同,负数的补码将反码加1
例如:12的补码是00001100 -12的补码是11110100
最后强调一点,计算机存储数据用补码形式来存储。
二、位运算及
1.位运算符都有哪些?
&与 |或 ^异或 ~非 >>右移 <<左移 >>>无符号右移
2.1<<35怎么理解?
1是int类型是32位(4字节),所以需要把35%32=3,事实上和执行1<<3等价
3.数据类型转换需要遵循什么原则?
小类型向大类型转换,是自动转换的,或者说隐式转换的
大类型向小类型转换,是需要强制转换的,或者说显式转换
例如:
byte b = 1;
short s = b;//自动转换
b = (byte) s;//强制转换
4.byte b = 10这个语句是正确的,为什么10是int型比byte大还不需要强制转换呢?
因为在java中做了特殊处理,其中规定byte,short,char类型可以直接赋予int类型的直接量,
例如:
byte b = 10;
short s = 10;
char c = 10;
以上赋值语句都是正确的。
但是不能超出超出类型的范围(byte占1字节),例如以下赋值就是错误的:
byte b = 128;
如果超出范围,必须得作强制转换,例如以下语句是正确的:
byte b = (byte) 128;
需要强调的是,必须是int类型的直接量,以下语句就是错误的:
byte b = 10L;