2 u012667066 u012667066 于 2016.04.06 22:49 提问

C,int64_t超出范围?
#include <stdio.h>  
#include <inttypes.h>

int main(void)
{
    //int64_t a=-(9223372036854775807)-1;    //-(2^63-1)-1,这么赋值不报警
    int64_t a=-9223372036854775808;            //-2^63,这样就报警
    printf("%zu\n", sizeof(int64_t));
    printf("%016lx\n", a);
}

运行结果如下:
图片说明
都能输出正确结果,但是第二种赋值会警告,编译器是不是只认识第一种写法?
规定了这么写?感觉真的怪,哈哈......

1个回答

devmiao
devmiao   Ds   Rxr 2016.04.06 23:51
已采纳
u012667066
u012667066 谢谢~,但是并没有回答我的问题啊,signed int64_t的范围不是在-2^63~2^63-1的吗,既然如此为何编译器只认同第一种写法呢?它编译的时候是不是做了点什么?讨论下~~
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!