浮点表示16进制数时,如何区分16进制f,d与后缀f,d?

浮点表示16进制数时,如何区分16进制f,d与后缀f,d?

		float f3=0xff;
		System.out.println("f3="+f3);
		double d4=0xdd;
		System.out.println("d4="+d4);

f3为什么输出的是255.0,不是15.0,

d4为什么输出的是221.0,不是13.0,

难道16进制下,float不需要后缀f?


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2023-06-12 10:08:13

同学你好~

1.16进制数据中,需要先按照表达式将数据表达为二进制,然后再转化为10进制之后进行输出,例如:十六进制的0xFF就是二进制的11111111,换算成十进制就是255。0xDD也是同理。

2.实际上并不是使用16进制不需要加f,而是当前表达式所表达的数据没有超过int的数据范围,所以不需要加f。在Java中,存储的整数默认使用int,而int是可以自动类型提升为float的,所以当使用float存储整数的时候,是先将整数按照int进行存储,然后转化为float。但是float的数据范围远大于int,当超出int范围的时候,就需要添加标记f或者F,使得存储的时候跳过“将整数按照int进行存储”的过程,直接按照float进行存储。

所以会发现,如果整数在int范围的时候,加不加f都是可以的,但是超出了,不加就会报错。

祝学习愉快~

  • 提问者 坨坨儿 #1

    我是觉得浮点型小数字面量不能用16进制表示,编译直接报错,比如float fv=0xab.cd 直接报错,更不用说加后缀f了,但float fv=123.56f (必须加后缀)编译就不会错。

    我理解是:

    数值型整数(比如25)字面量默认为int,可以用16进制表示;

    数值型小数(比如3.14)字面量默认为double,不能用16进制表示(10进制才不会报错)


    2023-06-12 19:15:15
  • 提问者 坨坨儿 #2

    当初提问,我就是怕用16进制字面量时,最后一个f不知道是当16进制的15对待,还是当float后缀对待,

    2023-06-12 19:17:17
  • 好帮手慕小尤 回复 提问者 坨坨儿 #3

    同学你好,同学理解是正确的。

    祝学习愉快!

    2023-06-13 11:10:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java工程师 2024版
  • 参与学习       2020    人
  • 提交作业       1249    份
  • 解答问题       1202    个

2024重磅革新,超百小时内容豪华升级,加速提升高级技能与高薪就业竞争力 课程紧贴企业最新人才需求,历经7年持续迭代,帮助万名学子入行转行 从零起点到高阶实战,学习路径稳健顺滑,成就从小白到工程师高薪

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师