C/C++中-1/7 的问题
2015-09-26 14:02
260 查看
真哥的这个问题引起了我的一些疑惑,也找到了一个重大的知识Bug,看书没好好消化的后果。
首先说下答案,C语言中-1/7=0,python中是1,这个不多解释。我要说的是,困扰我的一些关于有符号数,无符号数的问题。
-1的确会成为FFFFFFFF,但是是在无符号数转有符号数的情况才会发生。截断与补全是在数据类型发生改变的情况才会发生。还有浮点数什么的一些很细小的问题,这些都只有在转换的时候才会出现,或者隐式转换中才会出现。记忆力不太好,记得一塌糊涂,分不清谁是谁了都。
下面用代码来记录一下这件神奇的事情:
#include<iostream>
int main()
{
unsigned int x = -1;
int a = x / 7;
cout << x << endl;
return 0;
}
x = 4294967295
a = 613566756
当无符号->有符号数时,-1会直接以FFFFFFFF的形式参与计算。
#include<iostream>
int main()
{
unsigned int x = -1;
int m = -1;
int a = x / m;
cout << a << endl;
return 0;
}
a = 1
多么有趣的机器。
补充说明:隐式类型转换--->包含signed与unsigned int,signed会转换为unsigned。如果int恰好为负数,其结果为对unsigned取值个数求模的结果。
首先说下答案,C语言中-1/7=0,python中是1,这个不多解释。我要说的是,困扰我的一些关于有符号数,无符号数的问题。
-1的确会成为FFFFFFFF,但是是在无符号数转有符号数的情况才会发生。截断与补全是在数据类型发生改变的情况才会发生。还有浮点数什么的一些很细小的问题,这些都只有在转换的时候才会出现,或者隐式转换中才会出现。记忆力不太好,记得一塌糊涂,分不清谁是谁了都。
下面用代码来记录一下这件神奇的事情:
#include<iostream>
int main()
{
unsigned int x = -1;
int a = x / 7;
cout << x << endl;
return 0;
}
x = 4294967295
a = 613566756
当无符号->有符号数时,-1会直接以FFFFFFFF的形式参与计算。
#include<iostream>
int main()
{
unsigned int x = -1;
int m = -1;
int a = x / m;
cout << a << endl;
return 0;
}
a = 1
多么有趣的机器。
补充说明:隐式类型转换--->包含signed与unsigned int,signed会转换为unsigned。如果int恰好为负数,其结果为对unsigned取值个数求模的结果。
相关文章推荐
- MySQL中的integer 数据类型
- android 代码实现控件之间的间距
- [Android]在代码里运行另一个程序的方法
- MySQL 数据类型
- 肯特·贝克:改变人生的代码整理魔法
- 网页恶意代码的预防
- 高手写的Tracer-Flash代码调试类代码下载
- PostgreSQL教程(四):数据类型详解
- CSS代码缩写技巧
- 非主流Q-zOne代码代码搜集第1/2页
- CreateWeb.vbs 代码
- Lua学习笔记之数据类型
- 实现Lua中数据类型的源码分享
- Lua和C语言的交互详解
- Lua中编译执行代码相关的函数详解
- Lua数据类型介绍
- SQL 研究 相似的数据类型
- 详解SQLite中的数据类型
- PowerShell中使用GetType获取变量数据类型
- c# 数据类型占用的字节数介绍