C++中整数转换的奇异问题

sunlikerain 2012-08-03 08:34:32

#include "stdafx.h"
#include <Windows.h>


int _tmain(int argc, _TCHAR* argv[])
{
int a = (WORD)2 - (WORD)10;
__int64 c = (WORD)2 - (WORD)10;
int d = (DWORD)2 - (DWORD)10;
__int64 b = (DWORD)2 - (DWORD)10;
return 0;
}

如上:我写了段简单的代码,但是运行结果却是:

a=-8, b=4294967288, c=-8, d=-8

运行平台: win7 32位, VS2008

百思不得其解上面的结果,有高人知道烦请告知下,不胜感谢!!
...全文
131 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
图灵狗 2012-08-06
  • 打赏
  • 举报
回复
楼主非常的不谦虚,别人好心好意的给你解答,不认真看,脾气还挺大!
printf("%d, %lld, %lld, %d\n", a, b, c, d);
关键是上面这句话,请睁大眼睛看清楚%lld的输出方式,没有实验通过,我发出一段代码干嘛。


[Quote=引用 2 楼 的回复:]

你说的不对,请做过实验再来
[/Quote]
sunlikerain 2012-08-05
  • 打赏
  • 举报
回复
我真是服了,请不要教训我,直接回答我的问题最好

下面是我做实验的结果:

我明白不同的数据类型转换时会产生类型转换,总是像精度较高的转换,比如float和double运算时会向double转换

但是,现在问题是:为什么dword向int转换时结果是正确的-8,而dword向__int64转换时,结果却是错误的

这个是我在win7 32位旗舰版, VS2008上测试的结果,结果是没有问题的

我看了汇编,初步估计是和编译器实现的平台相关,

int a = (WORD)2 - (WORD)10;
00411A1E mov dword ptr [a],0FFFFFFF8h
__int64 c = (WORD)2 - (WORD)10;
00411A25 mov dword ptr [c],0FFFFFFF8h
00411A2C mov dword ptr [ebp-14h],0FFFFFFFFh
int d = (DWORD)2 - (DWORD)10;
00411A33 mov dword ptr [d],0FFFFFFF8h
__int64 b = (DWORD)2 - (DWORD)10;
00411A3A mov dword ptr [b],0FFFFFFF8h
00411A41 mov dword ptr [ebp-30h],0

现在的问题是:为什么word转换成__int64就会正确,而DWORD转换成__int64就有问题呢?
xiaohuh421 2012-08-04
  • 打赏
  • 举报
回复
编程是要看书和做实验的.
楼主最好单步"汇编"代码看看,应该就能明白为何出现自己的实验结果了.
iamnobody 2012-08-03
  • 打赏
  • 举报
回复
编程不是做实验,看书吧.
sunlikerain 2012-08-03
  • 打赏
  • 举报
回复
你说的不对,请做过实验再来
图灵狗 2012-08-03
  • 打赏
  • 举报
回复
结果全部都是-8,没有问题的,可能是你打印的时候类型不匹配:

int a = (WORD)2 - (WORD)10;
__int64 c = (WORD)2 - (WORD)10;
int d = (DWORD)2 - (DWORD)10;
__int64 b = (DWORD)2 - (DWORD)10;

printf("%d, %lld, %lld, %d\n", a, b, c, d);
C/C++语言经典实用趣味程序设计编程百例精解C/C++语言经典实用趣味程序设计编程百例精解(1)1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大数 6.高次方数的尾数 7.阶乘尾数零的个数 8.借书方案知多少 9.杨辉三角形 10.数制转换 C/C++语言经典实用趣味程序设计编程百例精解(2)11.打鱼还是晒网 12.抓交通肇事犯 13.该存多少钱 14.怎样存钱利最大 15.捕鱼和分鱼 16.出售金鱼 17.平分七筐鱼 18.有限5位数 19.8除不尽的自然数 20.一个奇异的三位数C/C++语言经典实用趣味程序设计编程百例精解(3)21.4位反序数 22.求车速 23.由两个平方三位数获得三个平方二位数 24.阿姆斯特朗数 25.完全数 26.亲密数 27.自守数 28.回文数 29.求具有abcd=(ab+cd)2性质的四位数 30.求素数 C/C++语言经典实用趣味程序设计编程百例精解(4)31.歌德巴赫猜想 32.可逆素数 33.回文素数 34.要发就发 35.素数幻方 36.百钱百鸡问题 37.爱因斯坦的数学题 38.换分币 39.年龄几何 40.三色球问题C/C++语言经典实用趣味程序设计编程百例精解(5)41.马克思手稿的数学题 42.最大公约数和最小公倍数 43.分数比较 44.分数之和 45.将真分数分解为埃及分数 46.列出真分数序列 47.计算分数的精确值 48.新娘和新郞 49.委派任务 50.谁在说谎 C/C++语言经典实用趣味程序设计编程百例精解(6)51.谁是窃贼 52.黑与白 53.迷语博士的难题(1) 54.迷语博士的难题(2) 55.哪个大夫哪天值班 56.区分旅客国籍 57.谁家孩子跑最慢 58.拉丁方阵 59.填表格 60.1~9分成1:2:3的三个3位数 C/C++语言经典实用趣味程序设计编程百例精解(7)61.1~9组成三个3位的平方数 62.由8个整数形成奇特的立方体 63.减式还原 64.乘式还原 65.乘式还原(2) 66.除式还原(1) 67.除式还原(2) 68.九位累进可除数 69.魔术师的猜牌术(1) 70.魔术师的猜牌术(2) C/C++语言经典实用趣味程序设计编程百例精解(8)71.约瑟夫问题 72.邮票组合 73.和数能表示1~23的5个正整数 74.可称1~40磅的4块砝码 75.10个小孩分糖果 76.小明买书 77.波松瓦酒的分酒趣题 78.求π的近似值 79.求π的近似值(2) 80.奇数平方的一个有趣性质 C/C++语言经典实用趣味程序设计编程百例精解(9)81.角谷猜想 82.四方定理 83.卡布列克常数 84.尼科彻斯定理 85.回文数的形成 86.自动发牌 87.黑白子交换 88.常胜将军 89.抢30 90.搬山游戏 C/C++语言经典实用趣味程序设计编程百例精解(10)91.人机猜数游戏 92.人机猜数游戏(2) 93.汉诺塔 94.兎子产子 95.将阿拉伯数字转换为罗马数字 96.选美比赛 97.满足特异条件的数列 98.八皇后问题 99.超长正整数的加法 100.数字移动
C/C++语言经典实用趣味程序设计编程百例精解(1)
(详解收藏在)http://www.klfd.net.cn/?p=384
1.绘制余弦曲线
2.绘制余弦曲线和直线
3.绘制圆
4.歌星大奖赛
5.求最大数
6.高次方数的尾数
7.阶乘尾数零的个数
8.借书方案知多少
9.杨辉三角形
10.数制转换

C/C++语言经典实用趣味程序设计编程百例精解(2)
(详解收藏在)http://www.klfd.net.cn/?p=385
11.打鱼还是晒网
12.抓交通肇事犯
13.该存多少钱
14.怎样存钱利最大
15.捕鱼和分鱼
16.出售金鱼
17.平分七筐鱼
18.有限5位数
19.8除不尽的自然数
20.一个奇异的三位数

C/C++语言经典实用趣味程序设计编程百例精解(3)
(详解收藏在)http://www.klfd.net.cn/?p=386
21.4位反序数
22.求车速
23.由两个平方三位数获得三个平方二位数
24.阿姆斯特朗数
25.完全数
26.亲密数
27.自守数
28.回文数
29.求具有abcd=(ab+cd)2性质的四位数
30.求素数

C/C++语言经典实用趣味程序设计编程百例精解(4)
(详解收藏在)http://www.klfd.net.cn/?p=387
31.歌德巴赫猜想
32.可逆素数
33.回文素数
34.要发就发
35.素数幻方
36.百钱百鸡问题
37.爱因斯坦的数学题
38.换分币
39.年龄几何
40.三色球问题

C/C++语言经典实用趣味程序设计编程百例精解(5)
(详解收藏在)http://www.klfd.net.cn/?p=388
41.马克思手稿的数学题
42.最大公约数和最小公倍数
43.分数比较
44.分数之和
45.将真分数分解为埃及分数
46.列出真分数序列
47.计算分数的精确值
48.新娘和新郞
49.委派任务
50.谁在说谎

C/C++语言经典实用趣味程序设计编程百例精解(6)
(详解收藏在)http://www.klfd.net.cn/?p=389
51.谁是窃贼
52.黑与白
53.迷语博士的难题(1)
54.迷语博士的难题(2)
55.哪个大夫哪天值班
56.区分旅客国籍
57.谁家孩子跑最慢
58.拉丁方阵
59.填表格
60.1~9分成1:2:3的三个3位数

C/C++语言经典实用趣味程序设计编程百例精解(7)
(详解收藏在)http://www.klfd.net.cn/?p=390
61.1~9组成三个3位的平方数
62.由8个整数形成奇特的立方体
63.减式还原
64.乘式还原
65.乘式还原(2)
66.除式还原(1)
67.除式还原(2)
68.九位累进可除数
69.魔术师的猜牌术(1)
70.魔术师的猜牌术(2)

C/C++语言经典实用趣味程序设计编程百例精解(8)
(详解收藏在)http://www.klfd.net.cn/?p=391
71.约瑟夫问题
72.邮票组合
73.和数能表示1~23的5个正整数
74.可称1~40磅的4块砝码
75.10个小孩分糖果
76.小明买书
77.波松瓦酒的分酒趣题
78.求π的近似值
79.求π的近似值(2)
80.奇数平方的一个有趣性质

C/C++语言经典实用趣味程序设计编程百例精解(9)
(详解收藏在)http://www.klfd.net.cn/?p=392
81.角谷猜想
82.四方定理
83.卡布列克常数
84.尼科彻斯定理
85.回文数的形成
86.自动发牌
87.黑白子交换
88.常胜将军
89.抢30
90.搬山游戏

C/C++语言经典实用趣味程序设计编程百例精解(10)
(详解收藏在)http://www.klfd.net.cn/?p=393
91.人机猜数游戏
92.人机猜数游戏(2)
93.汉诺塔
94.兎子产子
95.将阿拉伯数字转换为罗马数字
96.选美比赛
97.满足特异条件的数列
98.八皇后问题
99.超长正整数的加法
100.数字移动
里面包括贝叶斯网络学习,SVM向量机学习等优秀的数学学习算法。 Dlib 18.1 发布了,除了一些 bug 修复外,该版本还包含值得关注的改进: 更精确的 SURF 特征提取器 更快的切削平面解算器 对非常大的矩阵计算奇异值分解的程序 对大数据集进行相关分析的工具 简单的工具用来编写并行循环 Dlib是一个使用现代C++技术编写的跨平台的通用库,遵守Boost Software licence. 主要特点如下: 1.完善的文档:每个类每个函数都有详细的文档,并且提供了大量的示例代码,如果你发现文档描述不清晰或者没有文档,告诉作者,作者会立刻添加。 2.可移植代码:代码符合ISO C++标准,不需要第三方库支持,支持win32、Linux、Mac OS X、Solaris、HPUX、BSDs 和 POSIX 系统 3.线程支持:提供简单的可移植的线程API 4.网络支持:提供简单的可移植的Socket API和一个简单的Http服务器 5.图形用户界面:提供线程安全的GUI API 6.数值算法:矩阵、大整数、随机数运算等 7.机器学习算法: 8.图形模型算法: 9.图像处理:支持读写Windows BMP文件,不同类型色彩转换 10.数据压缩和完整性算法:CRC32、Md5、不同形式的PPM算法 11.测试:线程安全的日志类和模块化的单元测试框架以及各种测试assert支持 12.一般工具:XML解析、内存管理、类型安全的big/little endian转换、序列化支持和容器类

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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