基本类型问题,short,byte赋予初始值的时候只能给0x7fff,0x7f。而int,char 初始值则是 0xffff ffff, 0xffff

halifa1989 2011-05-30 03:44:30
为什么short,byte 是7 开头的, 而 int,char是 f开头的……

另外一个float类型,是不是不能用十六进制表示0x表示,否则,怎么区分 f是类型,还是数值……
...全文
849 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
小绵羊 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 lh_fengyuzhe 的回复:]

引用 19 楼 halifa1989 的回复:
但是short s = 0xffff,也完全可以和 int i = 0xffffffff 一样啊 (等于-1)
但事实是,short s= 0xffff;根本不被允许……


类型转换问题了
[/Quote]
+1
小绵羊 2011-05-30
  • 打赏
  • 举报
回复
负数表示法 为它的绝对值的反码加一
例如 我们要表示 -1 ,首先它的绝对值是 1 ,
1的二进制表示为 00000000000000000000000000000001
求反码 11111111111111111111111111111110
+1 11111111111111111111111111111111 -1

反过来是一样负数-1求反码就是他的绝对值

-1的二进制表示为 11111111111111111111111111111111
-1 11111111111111111111111111111110
取反 00000000000000000000000000000001 1
lh_fengyuzhe 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 halifa1989 的回复:]
但是short s = 0xffff,也完全可以和 int i = 0xffffffff 一样啊 (等于-1)
但事实是,short s= 0xffff;根本不被允许……
[/Quote]

类型转换问题了
lh_fengyuzhe 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 halifa1989 的回复:]
引用 7 楼 bearkin 的回复:

引用 6 楼 halifa1989 的回复:
引用 1 楼 x19881216 的回复:

0x 就表示这个数是用16进制表示所以后面的f就代表15
前面不加0x后面的f就代表这是一个float

为什么short,byte 是7 开头的, 而 int,char是 f开头的……
不知道是什么意思

不好意思,我的表达能力不好,我的意思……
[/Quote]

因为oxffff是int类型,超出了short类型最大值,进行int到short转换时会造成精度丢失,编译报错
而oxffffffff尽管超出了int类型最大值,但是他还是int型,不需要转换,编译不报错,只是数据不正确。
如果int a = oxfffffffffL,由long型转换为int,也会编译报错
halifa1989 2011-05-30
  • 打赏
  • 举报
回复
但是short s = 0xffff,也完全可以和 int i = 0xffffffff 一样啊 (等于-1)
但事实是,short s= 0xffff;根本不被允许……
小绵羊 2011-05-30
  • 打赏
  • 举报
回复
上面的写错了

最小 10000000000000000000000000000000 0x80000000 负数
最大 01111111111111111111111111111111 0x7fffffff 正数

注意前面的符号位
0xffffffff = 11111111111111111111111111111111 符号位为1,是负数,在计算机里负数用反码表示
所以
0xffffffff = 00000000000000000000000000000000-1 = -1
halifa1989 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 x19881216 的回复:]

引用 15 楼 halifa1989 的回复:

引用 12 楼 x19881216 的回复:

引用 10 楼 halifa1989 的回复:

引用 9 楼 x19881216 的回复:

char是无符号的...

对,刚才又试了下,发现char在-1和32768是不同的,刚才那个代码,没用utf-8保存

一个新问题是,short和int应该是类似的,都是有符号的……
[/Quote]
你试试看,

int i=0xffffffff;

输出是-1,不是最大值……
小绵羊 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 halifa1989 的回复:]

引用 12 楼 x19881216 的回复:

引用 10 楼 halifa1989 的回复:

引用 9 楼 x19881216 的回复:

char是无符号的...

对,刚才又试了下,发现char在-1和32768是不同的,刚才那个代码,没用utf-8保存

一个新问题是,short和int应该是类似的,都是有符号的,
但是int可以给到0xffff ffff,但是s……
[/Quote]

short
最大值是 2进制 1111111111111111 16进制 0x7fff
最小值是 2进制 1000000000000000 16进制 0x8000

int
最大值是 2进制 11111111111111111111111111111111 16进制 0x80000000
最小值是 2进制 10000000000000000000000000000000 16进制 0x7fffffff
halifa1989 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 x19881216 的回复:]

引用 10 楼 halifa1989 的回复:

引用 9 楼 x19881216 的回复:

char是无符号的...

对,刚才又试了下,发现char在-1和32768是不同的,刚才那个代码,没用utf-8保存

一个新问题是,short和int应该是类似的,都是有符号的,
但是int可以给到0xffff ffff,但是short只能给到0x7fff
这个也挺奇怪的。
……
[/Quote]
int,32位,是没错,但是按照short的只能给到0x7fff,int应该只能给到0x7fff ffff
而不是0xffff ffff
小绵羊 2011-05-30
  • 打赏
  • 举报
回复
System.out.println(Byte.SIZE);
System.out.println(Short.SIZE);
System.out.println(Integer.SIZE);
System.out.println(Long.SIZE);
System.out.println(Float.SIZE);
System.out.println(Double.SIZE);

每个基本类型都有一个包装类,一些熟悉都在里面
halifa1989 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 x19881216 的回复:]

0x 就表示这个数是用16进制表示所以后面的f就代表15
前面不加0x后面的f就代表这是一个float

为什么short,byte 是7 开头的, 而 int,char是 f开头的……
不知道是什么意思
[/Quote]
比如
float f = 0xffff
是不是最后一个f表示他是个float类型……
这个好像有歧义的说
小绵羊 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 halifa1989 的回复:]

引用 9 楼 x19881216 的回复:

char是无符号的...

对,刚才又试了下,发现char在-1和32768是不同的,刚才那个代码,没用utf-8保存

一个新问题是,short和int应该是类似的,都是有符号的,
但是int可以给到0xffff ffff,但是short只能给到0x7fff
这个也挺奇怪的。
[/Quote]
int在java里是32位的。。
halifa1989 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bearkin 的回复:]

引用 6 楼 halifa1989 的回复:
引用 1 楼 x19881216 的回复:

0x 就表示这个数是用16进制表示所以后面的f就代表15
前面不加0x后面的f就代表这是一个float

为什么short,byte 是7 开头的, 而 int,char是 f开头的……
不知道是什么意思

不好意思,我的表达能力不好,我的意思是,short,char都是16位的,都是带……
[/Quote]
一个新问题是,short和int应该是类似的,都是有符号的,
但是int可以给到0xffff ffff,但是short只能给到0x7fff
这个也挺奇怪的。
halifa1989 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 x19881216 的回复:]

char是无符号的...
[/Quote]
对,刚才又试了下,发现char在-1和32768是不同的,刚才那个代码,没用utf-8保存

一个新问题是,short和int应该是类似的,都是有符号的,
但是int可以给到0xffff ffff,但是short只能给到0x7fff
这个也挺奇怪的。
小绵羊 2011-05-30
  • 打赏
  • 举报
回复
char是无符号的...
小绵羊 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 halifa1989 的回复:]

引用 1 楼 x19881216 的回复:

0x 就表示这个数是用16进制表示所以后面的f就代表15
前面不加0x后面的f就代表这是一个float

为什么short,byte 是7 开头的, 而 int,char是 f开头的……
不知道是什么意思

不好意思,我的表达能力不好,我的意思是,short,char都是16位的,都是带符号的,赋初值的时候,char可以给到0xfff……
[/Quote]
short有符号位 实际 short宽度只有15位
BearKin 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 halifa1989 的回复:]
引用 1 楼 x19881216 的回复:

0x 就表示这个数是用16进制表示所以后面的f就代表15
前面不加0x后面的f就代表这是一个float

为什么short,byte 是7 开头的, 而 int,char是 f开头的……
不知道是什么意思

不好意思,我的表达能力不好,我的意思是,short,char都是16位的,都是带符号的,赋初值的时候,char可以给到0xffff……
[/Quote]

char又不是整型 不用区分正负数 只关心赋予他的值是什么(在其大小范围内)

halifa1989 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 x19881216 的回复:]

0x 就表示这个数是用16进制表示所以后面的f就代表15
前面不加0x后面的f就代表这是一个float

为什么short,byte 是7 开头的, 而 int,char是 f开头的……
不知道是什么意思
[/Quote]
不好意思,我的表达能力不好,我的意思是,short,char都是16位的,都是带符号的,赋初值的时候,char可以给到0xffff(虽然实际是负数,但是是合法的,可以编译),但是short如果给0xffff的话就编译不通过。
halifa1989 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chenchenyangll 的回复:]

你自己算一下啊
0x7fff 0x7f是多少不就清楚了吗?
[/Quote]

public static void main(String[] args)
{
int i = 0xffffffff;
byte b = 0x7f;
short s = 0x7fff;
//short ss = 0xffff;
short s1 = (short) 0xffff;
char c = 0xffff;
long l = 0xffffffffffffffffl;
System.out.println("int i = 0xffffffff " + i);
System.out.println("byte b = 0x7f; " + b);
System.out.println("short s = 0x7fff; " + s);
System.out.println("short s1 = (short) 0xffff; " + s1);
System.out.println("char c = 0xffff; " + c);
System.out.println("new Character((char) -1) "
+ new Character((char) -1));
System.out.println("new Character((char) 32768) "
+ new Character((char) 32768));
System.out.println("new Character((char) 65536) "
+ new Character((char) 65536));
}

输出结果

int i = 0xffffffff -1
byte b = 0x7f; 127
short s = 0x7fff; 32767
short s1 = (short) 0xffff; -1
char c = 0xffff; ?
new Character((char) -1) ?
new Character((char) 32768) ?
new Character((char) 65536)


halifa1989 2011-05-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lh_fengyuzhe 的回复:]

引用楼主 halifa1989 的回复:
为什么short,byte 是7 开头的, 而 int,char是 f开头的……

另外一个float类型,是不是不能用十六进制表示0x表示,否则,怎么区分 f是类型,还是数值……


short,byte 都能以f开头啊,只是byte最大值为127,所以16进制最大值为7f,
short最大值32767,16进制对应为7fff,
sho……
[/Quote]
但是在eclipse里面试验一下,short a = 0xffff的话就会出错
short和char 一样,都是16位的,为什么一个可以初值可以赋予0xffff,一个却不能……
加载更多回复(3)

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧