动手动脑一:分别给程序中的s和t赋值,然后再判断两者是否相等,再定义一个U,赋值为small,再判断其是否和S相等,并输出所有的元素。
动手动脑二:
在计算机内,定点数有3种表示法:原码、反码和补码。
反码:
正数:正数的反码与原码相同。
负数:负数的反码,符号位为“1”,数值部分按位取反。 例如: 符号位 数值位
[+7]反= 0 0000111 B
[-7]反= 1 1111000 B
注意:1. 数0的反码也有两种形式,即
[+0]反=00000000B
[- 0]反=11111111B
2. 8位二进制反码的表示范围:-127~+127
原码:在数值前直接加一符号位的表示法。
例如: 符号位 数值位
[+7]原= 0 0000111 B
[-7]原= 1 0000111 B
注意:a. 数0的原码有两种形式:[+0]原=00000000B [ -0]原=10000000B
b. 8位二进制原码的表示范围:-127~+127
补码:
正数:正数的补码和原码相同。
负数:负数的补码则是符号位为“1”。并且,这个“1”既是符号位,也是数值位。数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。
例如: 符号位 数值位
[+7]补= 0 0000111 B
[-7]补= 1 1111001 B
补码在微型机中是一种重要的编码形式,请注意:
a. 采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。 正数的补码即是它所表示的数的 真值,而负数的补码的数值部分却不是它所表示的数的真值。采用补码进行运算,所得结果仍为补码。
b. 与原码、反码不同,数值0的补码只有一个,即 补=00000000B。
c. 若字长为8位,则补码所表示的范围为-128~+127;进行补码运算时,应注意所得结果不应超过补码所能表示数的范围。
验证,java中数的类型
package kehou; public class Bit { public static void main(String[] args) { int a=-13; System.out.println(a>>1); } }
A:若用原码表示。-13的机器数表示为[10001101]原,右移后表示为[11000110],十进制为-70,与正解-7不一样。所以不是用原码表示。
B:若用反码表示。-13的机器数表示为[11110010]反,右移后表示为[11111101]反,转换成原码为[10000010]原,十进制为-2,与正解-7不一样。所以不是用反码表示。
C:若用补码表示。-13的机器数表示为[11110010]补,右移后表示为[11111110]补,转换成补码为[111111001]反,再转换成原码为[100000111],十进制为-7,与正解-7一致。所以Java中的数是用原码表示的。
综上,Java中的数是用补码表示的.
动手动脑三:
package kehou; public class Bit { int a=2; public static void main(String[] args) {int a=22; System.out.println(a); } }
由图可知,同名变量存在时,遵循着全局变量<局部变量的原则。
动手动脑四:
package kehou; public class TestDouble { public static void main(String args[]) { System.out.println("0.05 + 0.01 = " + (0.05 + 0.01)); System.out.println("1.0 - 0.42 = " + (1.0 - 0.42)); System.out.println("4.015 * 100 = " + (4.015 * 100)); System.out.println("123.3 / 100 = " + (123.3 / 100)); } }
结论: 使用double类型的数值进行计算,其结果是不精确的。
动手动脑五:
package kehou; public class Bit { public static void main(String args[]) { int x=100; int y=200; System.out.println("x+y="+x+y); System.out.println(x+y+"+x+y"); } }
结论:+号在java中会将+号前面的进行求和,后面的则只会单独的作为一个链接的符号。