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的吗,既然如此为何编译器只认同第一种写法呢?它编译的时候是不是做了点什么?讨论下~~
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
解决:linux c 如何打印 64 bit的long long整型 int64_t
#include unsigned long long ll=0x9102928374747474; void main() { printf("**************\n"); printf("%x,%llx\n",ll,ll);
How to print 如何输出 int64_t,uint64_t的值 in C
For int64_t type: int64_t t; printf("%"PRId64"\n", t); for uint64_t type: uint64_t t; printf("%"PRIu64"\n", t); you can also use PRIx64 to print in hexadecimal. These macros are defined i
__int64及__time64_t 格式化
printf 输出 long long在windows 环境下 %I64d 在linux 环境下 %lld在VC6、DEV、CodeBlocks中C语言都可以使用__int64,格式化输出标识为%I64d。不过在VC6中数字后加2个L是会报错,可以只 加1个或不加。查了下资料,__int64是windows专用的,被vc、gcc等编译器支持,但在在UNIX、Linux中需用long long配合%
关于int8_t int64_t size_t ssize_t的相关问题
在代码中经常看到int8_t/int16_t/int32_t/int64_t/uint8_t/size_t/ssize_t,以前对这个问题一直是稀里糊涂的,不明白它们到底是什么数据类型,现在上班了,必须把它弄明白了 uint8_t之类 那么_t的意思到底表示什么?具体的官方答案没有找到,不过我觉得有个答案比较接近。它就是一个结构的标注,可以理解为type/typedef的缩写,表示它是通过ty
C++ __int64用法
在做ACM题时,经常都会遇到一些比较大的整数。而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647。而unsigned范围是[0,2^32),即0~4294967295。也就是说,常规的32位整数只能够处理40亿以下的数。
C++ __int64的printf用法
在做数据通信的项目中,由于服务器长期运行产生的数据通信的字节不断增加,正常的数据类型的大小已经不能满足要求了。long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647。而unsigned范围是[0,2^32),即0~4294967295。也就 是说,常规的32位整数只能够处理40亿以下 的数。         那遇 到比40亿要大的数怎么办呢?这时
嵌入式 Linux C如何打印64bit的longlong整型int64_t
64位无符号整型打印方式: #include  unsigned long long ll=0x9102928374747474;  void main()  {          printf("**************\n");          printf("%x,%llx\n",ll,ll);          printf("%llu\n",ll); 
stdint.h[int8_t, int16_t, int32_t, int64_t]
http://pubs.opengroup.org/onlinepubs/9699919799/ //C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\stdint.h /* stdint.h standard header */ #pragma once #ifndef _STDINT #define _STDINT
[转载]int,int32_t,int64_t
原文地址:int,int32_t,int64_t作者:走向希望 这些事跨平台编程导致的;一、数据类型特别是int相关的类型在不同位数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小,只规定级别。作下比较: 16位平台 char       1个字节8位 short       2个字节16位 int         2个字节16位 long
int,int32_t,int64_t和struct内存对齐
这些事跨平台编程导致的;一、数据类型特别是int相关的类型在不同位数机器的平台下长度不同。C99标准并不规定具体数据类型的长度大小,只规定级别。作下比较: 16位平台 char       1个字节8位 short       2个字节16位 int         2个字节16位 long       4个字节32位 指针       2个字节 32位平台