为什么宏INT_MIN要写成-2147483647-1 ?
编译器遇到型如-X的数值,它首先会确定X的数据类型,然后取X的负数。-2147483648,后面的是unsigned int还是long? 如果是unsigned int,无符号数求反,得到-2147483648是unsigned int类型,值为2147483648;如果是long,-2147483648就是long类型,值就是-2147483648。但是它们都不是int类型。
做个测试,short a = -2147483648;编译器会告诉你,overflow in conversion from ‘long int’ to ‘short int’,所以在我的电脑上-2147483648是long类型。
为什么 200*300*400*500 = -884901888 ?
十进制整数会被编译器看作int类型,当int为32位时,32位无符号最大42亿,这个乘积120亿,先模42亿,得30多亿,int有符号最大21亿,所以减去21亿,echo $(((200*300*400*500)%2**32-2**32))。
标签:第一篇,32,unsigned,long,int,编译器,博客,2147483648,hhh From: https://www.cnblogs.com/fanghai/p/17759996.html