这个取决于今早看耗子叔的微博:

这里说到了int的取值范围的问题,int的取值是-2147483648 ~ 2147483647,但是如果直接在编译器(VS2013)中使用-2147483648会报错:

error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型

编译器(VS2013)在看到-2147483648时,会先做一个判断,就是先做一个2147483648 > INT_MAX ?的判断,判断为真后会认为int装不下于是调用unsigned int来装,但是unsigned int在准备赋值时会先将它取反,再去赋值。所以这个过程在编译器来看是这样的:

unsigned int tmp = 2147483648;

tmp = –tmp

int n = tmp

这也是耗子叔说的那句为什么这个数是一个表达式的原因。这个过程在别的数上没有问题,但是遇到+2147483648就不行,因为+2147483648在高位到第一个1上取反时还是他本身【自行查二进制表示】,所以在这里变成了n = 2147483648,这个显然会溢出,所以有了那个error。

我们真的要使用这个这个值,要做一下特殊处理:

#define INT_MIN	(-2147483647 - 1) 

这样就正常了,就是一个类型的自动转换的知识。

然后后来耗子叔自己转发了一个链接,那里讲的也比较清楚,链接如下:

http://www.hardtoc.com/archives/119

[编译,报错以及其他] 有关C/C++中int不能用-2147483648当最小值的问题的更多相关文章

  1. 使用C#模拟Outlook发送邮件,代码编译报错

    添加OutLook API using OutLook = Microsoft.Office.Interop.Outlook; 发送邮件方法 public void SendEmail() { Out ...

  2. cordova编译报错:Execution failed for task ':processDebugResources'

    cordova编译报错:Execution failed for task ':processDebugResources' 引发这个错误的最扩祸首就是一个中文命名的文件,不知道什么时候加入的,我写了 ...

  3. 编译报错dereferencing pointer to incomplete type

    关于编译报错“dereferencing pointer to incomplete type... 多是没找到结构体的定义,可以在本地复制其定义试试. 参考: http://my.oschina.n ...

  4. Maven-010-maven 编译报错:Failure to ... in ... was cached in the local repository, resolution will not be reattempted until the update interval of nexus has elapsed or updates are forced.

    今晚在编译 maven 项目的时候,命令行报错,出现 Failure to ... in ... 类似错误,详细的错误信息如下所示: [INFO] -------------------------- ...

  5. iOS开发编译报错、常见问题(实时更新)

    一.报错与警报 1.错误代码:No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=x86_64, VALID_ARCH ...

  6. [Intellij] 编译报错 javacTask

    报错信息: Idea 编译报错 javacTask: 源发行版 1.6 需要目标发行版 1.6 解决方案:

  7. jenkis编译报错:需要class,interface或enum

    现象: 1.jenkis编译报错:需要class,interface或enum 2.使用ant进行编译ok. 解决方法: 1. Jenkis重新编译一个以前成功的svn版本,直至编译成功. 2.Jen ...

  8. 对arm指令集的疑惑,静态库运行,编译报错等问题

    转载自http://www.jianshu.com/p/4a70aa03a4ea?utm_campaign=hugo&utm_medium=reader_share&utm_conte ...

  9. xocde7下导入libsqlite3.tbd编译报错的解决办法

    在xocde7下没有libsqlite3.dylib,只有libsqlite3.tbd,然后我导入了tbd.编译报错error: /Applications/Xcode.app/Contents/De ...

随机推荐

  1. HDU 3068 最长回文(manachar算法)

    最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  2. 通过BeanFactoryPostProcessor来获取bean

    一.现在我们很多时候都在spring的容器中,进行bean的提取和操作,但是配置里面首先需要扫描相应的包来实现相关bean的注入 但是问题来了.如果我们在另外一个线程需要用的时候,并且没有配置扫描该类 ...

  3. Go语言并发编程总结

    转自:http://blog.csdn.net/yue7603835/article/details/44309409 Golang :不要通过共享内存来通信,而应该通过通信来共享内存.这句风靡在Go ...

  4. C++中的STL中map用法详解(转)

    原文地址: https://www.cnblogs.com/fnlingnzb-learner/p/5833051.html C++中的STL中map用法详解   Map是STL的一个关联容器,它提供 ...

  5. dd命令的conv=fsync,oflag=sync/dsync

    conv的参数有 1.sync Pad every input block to size of 'ibs' with trailing zero bytes. When used with 'blo ...

  6. 分布式锁实践(一)-Redis编程实现总结

    写在最前面 我在之前总结幂等性的时候,写过一种分布式锁的实现,可惜当时没有真正应用过,着实的心虚啊.正好这段时间对这部分实践了一下,也算是对之前填坑了. 分布式锁按照网上的结论,大致分为三种:1.数据 ...

  7. 20165233 预备作业3 Linux安装及学习

    Linux学习记录 别出心裁的Linux命令学习法学习总结 (由于我的电脑是Mac,Linux安装省略) 操作系统的功能: 管家婆和服务生 博客中对于这两个词含义的解释为 管家婆:通过进程.虚拟内存和 ...

  8. XE7 update1

  9. Linux学习---Linux目录结构说明

    1./- 根 每一个文件和目录从根目录开始. 只有root用户具有该目录下的写权限.请注意,/root是root用户的主目录,这与/.不一样 2./bin中 - 用户二进制文件 包含二进制可执行文件. ...

  10. python之private variable

    [python之private variable] Since there is a valid use-case for class-private members (namely to avoid ...