首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在C中无符号的long long int没有显示正确的值?

在C语言中,long long int是一种有符号的整数类型,可以表示更大范围的整数值。而无符号的long long int则是没有符号位的,它的取值范围更大,可以表示非负整数。

如果在C中使用无符号的long long int时出现显示不正确的值,可能有以下几个原因:

  1. 数据溢出:由于无符号的long long int可以表示的范围更大,如果在计算过程中结果超出了其表示范围,就会发生溢出。溢出会导致结果显示不正确或不可预测。
  2. 数据类型不匹配:C语言中,不同数据类型之间的相互赋值或计算可能会导致类型转换问题。如果在赋值或计算中将其他类型的值赋给无符号的long long int,或者将其结果赋给其他类型,可能会导致显示不正确的值。
  3. 输入输出格式错误:无符号的long long int在输出时需要使用与其类型相匹配的格式说明符,例如"%llu"。如果在输出时使用了错误的格式说明符,就可能导致显示不正确的值。

为了解决这个问题,可以尝试以下几个方法:

  1. 检查数据溢出:确保在计算无符号的long long int时,结果不会超出其表示范围。可以使用条件判断语句或限制输入值的范围,以防止溢出。
  2. 使用正确的数据类型:确保在赋值或计算时,使用与无符号的long long int相匹配的数据类型。可以进行类型转换或使用类型兼容的函数进行计算。
  3. 使用正确的输入输出格式:在输出无符号的long long int时,使用正确的格式说明符。可以参考C语言的格式化输出函数,如printf和fprintf,并使用"%llu"格式说明符来正确显示无符号的long long int的值。

请注意,以上方法是解决无符号的long long int显示不正确值的一般性建议,具体情况可能因代码实现、编译器或运行环境而异。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

EasyC++05,C++long long和__int64

这是EasyC++系列第五篇,聊聊C++long long和__int64。...long long 和 __int64 C++ Primer当中提到64位int只有long long,但是实际各种各样C++编译器当中,64位int一直有两种标准。...历史遗留问题 首先是聊聊这个问题背景,为什么会有两种标准呢?这并不是C++标准不严谨,或者是各大编译器乱来,背后是有一个历史遗留问题。...很多同学使用第一个C++编译器就是VC6.0,所以记得VC6.0当中要使用__int64而非long long。 既然VC6.0搞出了__int64,那么微软后续C++版本显然就必须要兼容它。...无法编译 错误 __int64 “%I64d” 正确 正确 无法编译 无法编译 正确 long long cout 非C++ 正确C++ 正确 无法编译 __int64 cout 非C++ 正确

71010

C语言整型溢出问题 intlonglong long取值范围 最大最小「建议收藏」

溢出和取值范围 C语言整型溢出问题 整数溢出 intlong intlong long int 占用字节疑问 《C和指针》写过:longint:标准只规定long不小于int长度,int...long longwin32是确实存在,长度为8个字节;定义为LONG64。 为什么会出现long int呢?...win32现在系统,长度为4;在历史上,或者其他某些系统int长度为2,是short int。...即便是long longTI有款平台中,长度为5也就是说,每种类型长度,需要sizeof才知道,如果可能,最好用union看看里面的数据,可以消除一些类型假象长度。...#include存有各个类型最大和最小 CHAR_MIN       char最小 SCHAR_MAX      signed char 最大 SCHAR_MIN

1.6K20
  • C语言 -- 一个由数据类型和取值范围引发 BUG

    C语言 -- 叫你一声你敢答应嘛》 2.3 部分讲到 char 字符型,占用一个字节;而 int 整型,通常反映了所用机器整数最自然长度。那一个字节和机器整数最自然长度到底是多大呢?...基本类型整数类型、浮点数类型和字符类型之前介绍过了;其中_Bool是布尔型,只能取 0 和 1 两个;另一个是枚举类型(enum),这个类型将在后面的部分进行介绍。... C 语言并没有限制 int 大小,更没有限制 short int 等带限定符数据类型大小,只是规定了 short int<=int<=long int<=long long int 注意哦,是小于等于...但是我们如果强制将符号数赋值为负数呢?代码如下 ? 输出结果如下图所示 ? 我们可以看到符号数 b果然没有输出对应 -1 ,但是为什么输出 65535 呢?这就与数据类型取值范围有关了。...主要因为 0 也占据了整数一部分,所以导致正数最高只能到127。 那聪明你现在一定知道将符号整型赋值为-1,打印输出却是 65535 原因了吧~如果知道的话可以留言回复哦~ ?

    84920

    C语言进阶——数据在内存存储

    现在我们可以进入更深层次C语言世界了,而本文是我们进阶首篇文章,主要是介绍各种数据在内存存储情况,比如有符号char最大是多少、整型数据与浮点型数据在内存存储方式有何不同等,学会这些知识能增加我们内功...signed char 有符号 char unsigned char 符号 char short short比 char 大1字节,因此所表示范围会比 char 大很多,最大同样是符号表示...signed short unsigned short int int为标准4字节,32比特位,有无符号 int 最大差别依旧很大 signed int...unsigned int long long大小是4~8字节,这里我们取8字节,相当于long long,作为最大数据类型,long使用时几乎很难造成溢出,因为比较符号long...因为CPU只有加法器,执行减法操作时会将被减数转换为一个负数,然后再进行相加  补码产生使得加法转换为减法后计算结果依旧正确,而且因为转码运算过程是相同,不需要借助额外硬件电路,

    18120

    代码质量分析-整数处理问题

    [int]:0 ~ 2^32-1 [signed] long long [int]:-2^63 ~ 2^63-1 unsigned long long [int]:0 ~ 2^64-1 问:C语言中...使用他们是为了明确得定义长度,避免直接使用基础类型时,不同编译机器上出现差异,从定义文件可以窥见: # if __WORDSIZE == 64 typedef long int int64..._t; # else __extension__ typedef long long int int64_t; # endif 提问:为什么符号正数范围是-1?...c变成true 综上可知,写代码时要尽量避免以下行为: 将长类型赋值给短类型; 在有符号符号类型之间做转换(尤其是有负数存在时); 对有符号符号类型参数做运算(尤其是有负数存在时); 做计算时...t c语言有符号数和符号转换及思考 数据类型转换 符号扩展 为什么int正数范围会-1

    1.1K10

    萌新不看会后悔C++基本类型总结(二)

    下面的结论是需要记住C++中将使用这几种类型能够存储该数最小类型来表示,前提是该数后面没有后缀,如果有后缀,则按后缀指定类型来存储,至于浮点数呢,C++规定过只要不加f后缀浮点数默认都为double...至于为什么会使用符号类型来存储,这是因为十六进制常用来表示内存地址,内存地址是没有符号,因此unsigned intlong更适合来表示十六位地址。...int number = 666; const int * const p = &number; // p既不能改变指向地址,也不能改变,这个属于它们三个大哥。...4. char符号问题 char有无符号int不太一样,它比较独特,char默认情况下不像int那样,默认既不是unsigned char也不是signed char,是否有符号C++决定,编译器上可能是有符号类型...bool b1 = true // 正确 bool b2 = 4; //正确,但4会被替换为1 int a = b2; // a为1,而不是4,也不是true 6.

    72521

    详解C语言数据类型和变量(上)

    //短整型 short [int] [signed] short int //有符号 unsigned short int //符号 //整型 int [signed] int //有符号 unsigned...int //符号 //长整型 long [int] [signed] long [int] //有符号 unsigned long [int] //符号 //更长整型 //C99引入...long long [int] [signed] long long [int] //有符号 unsigned long long [int] //符号 1.3 浮点型 float //单精度浮点型...没有布尔类型之前,C语言内部是以“0”表示“假”,“非0”表示“真”。 C99,布尔类型就被使用了,功能:专门表示真假。...解释:在上面讲过,布尔类型是C99引入,那是不是就意味着C语言创建之初,就没有想到过,把布尔类型作为C语言数据类型(但现在是了)。

    9510

    C++类型转换几种情况

    而最后c5被赋予31325这个,由于没有使用{}处理,并没有保存,但其结果是不确定。...5.整形提升情况下,如果两个操作数都是有符号或者符号类型,且其中一个操作数级别比另一个低,则转换为最高级别的类型。...6.如果一个操作数为有符号,另一个操作数是符号,且符号操作数级别比有符号操作数级别高,则将有符号操作数转换为符号操作数所属类型。...整形提升: 如果bool,char、short,包括它们有符号符号变型,以及枚举类型,可以使用在需要int或者unsigned int表达式。...传递参数时转换 如果函数参数类型定义为double类型,但是传入int类型,这在C中会提示错误,但在C++C++会自动帮我我们转换为函数原型定义,条件是两种都是算术类型。

    2.2K20

    C语言——B数据类型和变量

    这是一个良好习惯 1.4 布尔型 C语言原来并没有为布尔单独设置一个类型,而是使用整数0表示假,非0表示表示真,C99引入了布尔类型,专门表示真假,还是以0/1判断真假为多。...# sizeof 运算符返回C 语言只规定是⽆符号整数,并没有规定具体类型,而是留给系统自己去决定, sizeof 到底返回什么类型。...例如,CC++ char 类型通常是有符号,所以其取值范围是 -128 到 127。而在很多其他语言中,比如 Java,char 类型是符号,所以其取值范围是 0 到 255。...该占位符本⾝不输出,只将存储指定变量之中。 • %o :⼋进制整数。 • %p :指针。 • %s :字符串。 • %u :符号整数(unsigned int)。 • %x :十六进制整数。...输出默认是右对齐,如果希望改为左对齐,则可以%后添加 - 符号。对于小数,这个限定符会限制所有数字最小显示宽度。

    13210

    C数据(一)】数据类型和变量你真的理解了吗?来看看这篇

    int //⻓整型 long [int] [signed] long [int] unsigned long [int] //更⻓整型 //C99引⼊ long long [int...sizeof(数组元素类型) 例如: 计算结构体大小 sizeof(结构体名) 例如: 计算表达式大小 sizeof(表达式) 例如: C语言标准只规定sizeof运算符返回一个符号整数,但并没有明确指定返回具体类型...C语言提供了size_t类型来解决这个问题: size_t是一个类型别名,它会被定义为当前系统下sizeof返回正确类型,可能是unsigned int、unsigned long等。...unsigned类型没有符号位,所以范围比signed类型更大,如uint为0到4294967295。 运算结果: signed类型一些运算可能会发生溢出。...0000 0000 0110 (-10,但unsigned int没有负数) 由于结果-10超出了unsigned int范围,所以根据符号溢出规则,高位溢出位被舍弃,结果保留为最大正值: 0000

    80210

    从Java到C++——基本数据类型

    空类型(void)没有具体,只用于某些特殊场合,如函数返回void。算术类型有整形数、浮点数、布尔类型和字符。    ...下表列出了C++标准规定尺寸最小C++标准只给定了尺寸最小,同时允许编译器赋予这些类型更大尺寸。所以同一个数据类型不同平台不同操作系统下尺寸大小有可能不同。...整形数和char类型又有带符号符号之分     short、intlonglong long、char都有带符号符号两种。...计算机数值是以二进制形式存储,带符号类型第一位是符号位,用于表示正负数,1表示负数,0表示正数;符号类型没有符号位,所有位数都用于表示数值大小。...-2n-1—2n-1-1; 符号表示数值范围是0—2n-1. bool类型是只表示true和false     bool是用于表示正确(true)和错误(false)一种逻辑类型,其中true和

    52630

    C语言】数据输出域宽控制(如何在输出数据时控制0占位)(如何输出前导0)(保留几位小数)(乘法口诀表打印不齐)等问题

    %X 符号十六进制整数,使用十六进制数0F %% 打印一个百分号 2.printf()标记 标记 含义 - 待打印项左对齐。...如:"%+6.2f" 空格 有符号若为正,则在前面显示前导空格(不显示任何符号);若为负,则在前面显示减号+标记覆盖一个空格。 如:"% 6.2f" # 把结果转换为另一种形式。...这些类型定义stdint.h 如:"%jd","%8jx" l 和整形转换说明一起使用,表示long int或unsigned long int类型。...这些类型定义stdint.h 如:"%jd","%8jx" l 和整形转换说明一起使用,表示long int或unsigned long int类型。...这些类型定义stdint.h 如:"%jd","%8jx" l 和整形转换说明一起使用,表示long int或unsigned long int类型

    18610

    C语言(数据和变量)

    C语言标准规定:sizeof(long)>=sizeof(int)。...对于有无符号打印是不相同: 值得一说是,上面用符号占位符%u来打印有符号数-10,显示是一个很大整数,这其中是有一定道理,感兴趣朋友可以阅读我另一篇文章 —> C语言...4.数据类型取值范围 数据类型有很多,尤其是整形就有short、intlonglong long 四种,为什么呢?...为什么呢?这是因为我们只是创建了一个变量,并没有给它赋值,所以编译器会因为不知道变量是多少而不能打印。...这里我们提一下全局变量和局部变量初始化问题。 全局变量不初始化时候,默认是0;而局部变量不初始化时候,它是随机

    6310

    CC++最常用输入输出方式对比

    &a, &b, &c); //输入格式必须严格按照scanf格式 //即输入:A整数B整数C整数 形式 //正确输入后返回为:3 printf("%d,%d,...2 //正确输出后返回为:26(汉字与中文符号占2个,'\n'占1个) return 0; } ---- 1.3 占位符 占位符是一种有特定作用符号,用于格式化字符串占住一个固定位置...lld 输入十进制长整数 long long o 输入八进制整数 int x 输入十六进制整数 int u 输入符号十进制整数 unsigned int llu 输入符号十进制长整数 unsigned...以十进制形式输出长整数 long long o 以八进制形式输出符号整数(不输出前缀0) int x 以十六进制形式输出符号整数(不输出前缀0x) int u 以十进制形式输出符号整数 unsigned...int llu 以十进制形式输出符号长整数 unsigned long long int f 以小数形式输出单、双精度实数 float, double e 以指数形式输出单、双精度实数 float,

    84220

    java安全编码指南之:Number操作

    简介 java可以被称为Number有byte,short,intlong,float,double和char,我们使用这些Nubmer过程,需要注意些什么内容呢?一起来看看吧。...注意不要使用0作为除数 我们使用变量作为除数时候,一定要注意先判断是否为0. 兼容C++符号整数类型 java只有16位char表示符号整数,而int实际上表示是带符号整数。...而在C或者C++是可以直接表示符号整数,那么,如果我们有一个32位符号整数,该怎么用java来处理呢?...,我们从Stream读取一个int,如果是一个32位符号整数,那么读出来int就变成了有符号负整数,这和我们期望是相符。...考虑一下,long是64位,我们是不是可以使用long来表示32位符号整数呢?

    61021

    C语言】关键字补充

    unsigned long [int] signed long [int] 之前讲过一个变量创建是要在内存开辟空间,空间大小是根据不同类型而决定。...如果一个数据是正数,那么它原反补都相同 符号数 不需要转化,也不需要符号位,原反补相同 对于整形来说:数据存放内存其实存放是补码 int a = 20; //20是正整数 //0000...(当然,最高符号位在哪里,又要明确大小端) 为什么都是补码 计算机系统,数值一律用补码来表示和存储。...总结规律:整数取值范围 符号:[0,2^n-1] 有符号:[-2^(n-1), 2^(n-1)-1] bool类型 我们没有具体说过bool类型,只简单了解其存在。...深入理解C bool类型 C语言有没有bool类型❓ c99之前,主要是c90是没有的,目前大部分书,都是认为没有的。因为书,一般都要落后于行业。

    24220

    C语言】数据类型和变量详解

    ,signed int就是一个有符号整型,既可以表示正数,也可以表示负数 (2)C语言中int默认就是signed int,任意一种写法都是正确,都可以保存正负数 (3)C语言规定,char类型可能是...由图可以看出各种类型大小,此处不再赘述,同时不知道大家有没有发现一件有趣事,intlong int大小一致,double 与long double大小一致,这是为什么呢?...这是因为C语言规定long int大小只需要大于等于 int大小就可以了,所以long int大小可以为4也可以为8,double和long double也是同理 最后我们来介绍一下...sizeof返回C语言只规定是符号整数,没有具体说明是整型还是长整型等等一系列数据类型,于是为了提高程序可移植性,C语言提出了一个新类型别名size_t,它占位符为%zd,而不是使用整型...**变量初始化:**创建变量时给一个初始叫做初始化,比如: int age = 0; //整型变量,初始化为0 我们需要注意两点:(1)VS2022编译器十分严谨,如果一个局部变量没有初始化就不让使用

    7710

    C++ 炼气期之数据是主角

    short int num_a=100000; 使用 long int 时,如果存储数字没有超过 long int所描述范围,可以直接赋值,如下是正确。...如下代码,很明显,1000000000098788已经远远超过了 int描述范围,语法上没有任何提示,并且能正确编译运行,只是从变量num_3获得数据是垃圾数据。...符号数据可以在数据添加 u或 U作为符号数据标识符号。 unsigned int num_3=34u; 有符号 int符号 int 所表示数字范围并不相同。...最小求解可理解为符号最大减去有符号最大再取反,-(4294967295-2147483647)=-2147483648。...符号字符型 char默认情况下既不是没有符号,也不是有符号,因为并没有编码为负数 ASCII字符。算是留了一个可扩展余地。

    31020

    深度刨析数据在内存存储

    1.数据类型介绍 C语言篇章我们就已经讲解了C语言当中内置类型以及它们所占空间。...unsigned long [int] signed long [int] 提问:为什么char属于整型家族?...本质上内存存放是二进制,vs上为了方便展示,显示16进制。 //为此我们来转化一下,二进制转化16进制,每4位二进制数转化位1位16进制数。...回答: 计算机系统,我们是以字节为单位,每个地址单元都对应着一个字节,一个字节为8bit.但是C语言中除了8bitchar外,还有16bitshort类型,32bitlong类型(long...11111111(-1补码打印-1) c符号char -1原码为:10000001 -1反码为:11111110 -1补码为:11111111 %d打印整型提升(因为c符号char

    12310

    C:01---数据类型与ASCII

    long 长整型 定义时,后面加上l或L 有符号符号数: unsigned:符号数,一般用来表示数据 signed:有符号数,一般用来表示数字 整型占位符: int 使用%d unsigned...int 使用%u long 10进制显示:%ld。...如果系统intlong大小相同,用%d也可以 8进制显示:%lo 16进制显示:%lx unsigned long %lu short 10进制显示:%d、%hd 8进制显示:% ho 二、字符型...char 占位符:%c符号范围:-128~127 符号范围:0~255 转义字符 \a 警告 \b 退格 \f 换页 \n 换行 \r 回车 \t 水平制表符 \v 垂直制表符 \\ 反斜杠...如果你已经有一定C语言基础了,那么你可以看这块代码: 这段代码就是将你输入字符进行强制转换成int类型

    77020
    领券