社区
C++ 语言
帖子详情
double转unsigned int的困惑!
cyy200
2004-08-04 03:19:59
.....
double i=2.3;
unsigned int j=i;
unsigned int k=(i-j)*100.0;
........
为什么输出出k=29,而不是k=30;???要得30该怎么办??
...全文
365
4
打赏
收藏
double转unsigned int的困惑!
..... double i=2.3; unsigned int j=i; unsigned int k=(i-j)*100.0; ........ 为什么输出出k=29,而不是k=30;???要得30该怎么办??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hellwolf
2004-08-04
打赏
举报
回复
double转int时,编译器会在编译期给出警告,这种转换丢失信息
dodont
2004-08-04
打赏
举报
回复
叹,好。
wmajia
2004-08-04
打赏
举报
回复
楼上的猜测应该是对的,在VC下看了下生成的汇编代码如下,有浮点运算,遇不懂,但 ST0 = +2.99999999999999822e-0001:还是用红色显示的,比较明显:)
48: unsigned int k=(i-j)*100.0;
00401321 mov eax,dword ptr [ebp-0Ch]
00401324 mov dword ptr [ebp-18h],eax
00401327 mov dword ptr [ebp-14h],0
0040132E fild qword ptr [ebp-18h]
00401331 fsubr qword ptr [ebp-8]
00401334 fmul qword ptr [__real@8@4005c800000000000000 (0042a020)]
0040133A call __ftol (0040147c)
0040133F mov dword ptr [ebp-10h],eax
49:
50: cout<<k<<endl;
EAX = 00000002 EBX = 7FFDF000
ECX = 00000000 EDX = 00000000
ESI = 00000000 EDI = 0012FF80
EIP = 00401334 ESP = 0012FF1C
EBP = 0012FF80 EFL = 00000202 CS = 001B
DS = 0023 ES = 0023 SS = 0023 FS = 0038
GS = 0000 OV=0 UP=0 EI=1 PL=0 ZR=0 AC=0
PE=0 CY=0
0042A020 = 4059000000000000
ST0 = +2.99999999999999822e-0001
ST1 = +0.00000000000000000e+0000
ST2 = +0.00000000000000000e+0000
ST3 = +0.00000000000000000e+0000
ST4 = +0.00000000000000000e+0000
ST5 = +0.00000000000000000e+0000
ST6 = +0.00000000000000000e+0000
ST7 = +0.00000000000000000e+0000
CTRL = 027F STAT = 3820 TAGS = 3FFF
EIP = 00401331 CS = 001B DS = 0023
EDO = 0012FF78
铖邑
2004-08-04
打赏
举报
回复
可能是i=2.3内部表现是2.2999999......,所以结果是29,可以通过四舍五入得到30
unsigned int k=(i-j)*100.0+0.5;
int
、
unsigned
int
、float、
double
和 char 在内存中存储方式
2017-12-28 创建人:Ruo_Xiao 实验环境:vs2010、
Int
el 邮箱:xclsoftware@163.com 2018-01-16 修改人:Ruo_Xiao 添加对移位存储的说明。 零、基础知识 原码、反码和补码是计算机存储数字的编码方式(表示方法)。 拓展:ASCII码、utf-8和utf-16是计算机存储字符的编码方式。 原码:符号位+数值的绝对值。 (1
double
、long、
unsigned
、
int
、char类型数据所占字节数(C语言)
我喜欢简单粗暴一点的学习方式,怎么简单怎么来。。。。。 所以不会去去写太多没用的东西。 和机器字长及编译器有关系: 所以,
int
,long
int
,short
int
的宽度都可能随编译器而异。 但有几条铁定的原则(ANSI/ISO制订的): 1 sizeof(short
int
)<=sizeof(
int
) 2 sizeof(
int
)<=sizeof(long...
可笑的
unsigned
double
最近犯了一个错误:定义变量类型的时候竟然定义了
unsigned
double
的类型。由于编译能够通过,因此一直没有发现这样写会有什么样的问题。今天一次偶然的测试中发现这些变量的值都是整数。一开始觉得奇怪,明明是浮点数,怎么变成整型了?后来上网查了一下资料:原来浮点数是不能用
unsigned
来规范的。
unsigned
的意思就是把内存中的数据第一位也用来表示数据,而不用于表示符号位。而浮点数规定内存中数据的第一位必须是符号位。因此两者之间是互相矛盾的,这也就是为什么浮点数不会有
unsigned
类型。可是这样
C++学习——
int
、long、long long,
double
, long
double
等的占用空间及取值范围
unsigned
int
0~4294967295
int
2147483648~2147483647
unsigned
long 0~4294967295 long 2147483648~2147483647 long long的最大值:9223372036854775807 long long的最小值:-9223372036854775808
unsigned
long lon...
unsigned
int
与
int
运算,结果是什么类型
unsigned
int
与
int
相加:
unsigned
int
val = 100; if (val - 150 > 0) pr
int
f("result is :
unsigned
int
\n"); else pr
int
f("result is :
int
\n"); //结果:result is :
unsigned
int
结果: value is 4294967246. 所以
unsigned
int
与
int
作运算时,
int
会自动
转
化为
unsigned
in
C++ 语言
65,210
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章