关于C语言运算的自动提权及类型转换的问题
来源:互联网 发布:java基础知识大全 编辑:程序博客网 时间:2024/05/16 12:38
先上程序
int16_t Test1,Test2,Test3,Test4;uint32_t uTest = 0;Test1 = (uTest-4760);Test2 = (uTest-4760)/10;uTest = (uint32_t)(uTest-4760);Test3 = uTest/10;Test4 = 0;
这段程序的计算结果是
下面解释一下为什么会出现错误的结果:
1,Test1 = (uTest-4760);的计算结果是-4760正确的,,,这是运算完之后直接赋值给了一个可以接收此负值的一个类型,没有出现问题
2,Test2 = (uTest-4760)/10;这个计算结果就是-26691错误的,因为计算完 -4760后还有一个除法运算,这是就需要一个变量类型。C语言把-4760自动提升为参与运算的最高级别的数据类型,也就是uTest所属的unsigned int类型,他需要把-4760强制转换成unsigned int后再去做除法运算,做完除法运算还要赋值给一个类型比自己小的short型,还要再进行一次类型转换。最后结果就成了-26691
3,uTest = (uint32_t)(uTest-4760);
Test3 = uTest/10;
这两步是我对2的一个验证。。。。。
1 0
- 关于C语言运算的自动提权及类型转换的问题
- 关于C语言的类型转换问题
- c语言的自动类型转换
- c语言的自动类型转换
- c语言的自动类型转换
- c语言的自动类型转换
- c语言的自动类型转换
- c语言的自动类型转换
- C语言的自动类型转换
- c语言的自动类型转换
- c语言的自动类型转换
- 关于C语言数量类型的转换
- C语言——运算符操作时的类型转换问题
- C语言运算时的参数符号自动转换
- C语言算术运算中数据类型的自动转换
- c语言运算过程中的类型自动转换原则
- C++:关于C++的四个类型转换运算符
- 关于三元运算符的类型转换问题
- KindEditor-编辑器配置参数属性
- 自定义EditText—带有清除功能,在显示多行文本时清除按钮位于整个EditText的右下角
- CentOS如何禁用root用户远程登录
- 系统时间
- Android官方提供的支持不同屏幕大小的全部方法
- 关于C语言运算的自动提权及类型转换的问题
- c头文件
- Linux下通过端口查看进程
- 在澳洲实施Scrum方法2年感受
- PAT (Basic Level) Practise (中文)1030. 完美数列(25)
- Socket Android手机客户端与PC服务端局域网内联测试
- 微信公众号企业号自定义菜单开发接口案例 php版
- ARM中C和汇编混合编程及示例
- MINA 框架之IoService学习