来看看C语言的-1>1并且小有1的问题
2015-09-03 17:58
381 查看
先看如下代码:
输出-1>1 ,又输出-1<1
来解释下原因:
1. 当两个不同类型做运算时候,c 会遵从内存占用小的向大的转,有符号的向无符号的转。
2. 负数在内存中是以补码的形式存在的。
s_minus_one在内存中为0xffff,和ui_one做比较的时候,s_minus_one的值变成2的16次方,所以大于1
s_minus_one 和i_one做比较的时候, 向signed int 转, 这个时候s_minus_one 还是-1,所以小于1
MAC 系统貌似有些不一样。要看看其他unix分支。
#include <stdio.h> //small to big, signed to unsigned int main() { unsigned int ui_one =1; signed int i_one =1; signed short s_minus_one =-1; if(s_minus_one>ui_one) printf("-1>1\n"); if(s_minus_one<i_one) printf("-1<1\n"); }
输出-1>1 ,又输出-1<1
来解释下原因:
1. 当两个不同类型做运算时候,c 会遵从内存占用小的向大的转,有符号的向无符号的转。
2. 负数在内存中是以补码的形式存在的。
s_minus_one在内存中为0xffff,和ui_one做比较的时候,s_minus_one的值变成2的16次方,所以大于1
s_minus_one 和i_one做比较的时候, 向signed int 转, 这个时候s_minus_one 还是-1,所以小于1
MAC 系统貌似有些不一样。要看看其他unix分支。
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- 在C语言中转换时间的基本方法介绍
- C语言进制转换代码分享