这是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++ 正确
溢出和取值范围 C语言的整型溢出问题 整数溢出 int、long int 、long long int 占用字节疑问 《C和指针》中写过:long与int:标准只规定long不小于int的长度,int...long long在win32中是确实存在,长度为8个字节;定义为LONG64。 为什么会出现long int呢?...在win32现在系统中,长度为4;在历史上,或者其他某些系统中,int长度为2,是short int。...即便是long long,在TI的有款平台中,长度为5也就是说,每种类型长度,需要sizeof才知道,如果可能,最好用union看看里面的数据,可以消除一些类型的假象长度。...在#include存有各个类型的最大值和最小值 CHAR_MIN char的最小值 SCHAR_MAX signed char 最大值 SCHAR_MIN
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 的原因了吧~如果知道的话可以留言回复哦~ ?
现在我们可以进入更深层次的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中只有加法器,在执行减法操作时会将被减数转换为一个负数,然后再进行相加 补码的产生使得加法转换为减法后的计算结果依旧正确,而且因为转码的运算过程是相同的,不需要借助额外的硬件电路,
[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
下面的结论是需要记住的:在C++中将使用这几种类型中能够存储该数的最小类型来表示,前提是该数后面没有后缀,如果有后缀,则按后缀指定的类型来存储,至于浮点数呢,C++规定过只要不加f后缀的浮点数默认都为double...至于为什么会使用无符号的类型来存储,这是因为十六进制常用来表示内存地址,内存地址是没有符号的,因此unsigned int 比 long更适合来表示十六位的地址。...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.
而最后c5被赋予31325这个值,由于没有使用{}处理,并没有保存,但其结果是不确定的。...5.在整形提升的情况下,如果两个操作数都是有符号或者无符号类型的,且其中一个操作数的级别比另一个低,则转换为最高级别的类型。...6.如果一个操作数为有符号的,另一个操作数是无符号的,且无符号操作数的级别比有符号操作数的级别高,则将有符号操作数转换为无符号操作数所属的类型。...整形提升: 如果bool,char、short,包括它们有符号或无符号变型,以及枚举类型,可以使用在需要int或者unsigned int的表达式中。...传递参数时的转换 如果函数参数类型定义为double类型,但是传入的时int类型,这在C中会提示错误,但在C++中,C++会自动帮我我们转换为函数原型中定义的值,条件是两种都是算术类型。
这是一个良好的习惯 1.4 布尔型 C语言原来并没有为布尔单独设置一个类型,而是使用整数0表示假,非0表示值表示真,在C99中引入了布尔类型,专门表示真假,还是以0/1判断真假为多。...# sizeof 运算符的返回值,C 语言只规定是⽆符号整数,并没有规定具体的类型,而是留给系统自己去决定, sizeof 到底返回什么类型。...例如,C 和 C++ 中的 char 类型通常是有符号的,所以其取值范围是 -128 到 127。而在很多其他语言中,比如 Java,char 类型是无符号的,所以其取值范围是 0 到 255。...该占位符本⾝不输出,只将值存储在指定变量之中。 • %o :⼋进制整数。 • %p :指针。 • %s :字符串。 • %u :无符号整数(unsigned int)。 • %x :十六进制整数。...输出的值默认是右对齐,如果希望改为左对齐,则可以在%后添加 - 符号。对于小数,这个限定符会限制所有数字的最小显示宽度。
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
%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类型的值。
空类型(void)没有具体的值,只用于某些特殊的场合,如函数的返回值void。算术类型有整形数、浮点数、布尔类型和字符。 ...下表列出了C++标准规定的尺寸的最小值,C++标准只给定了尺寸的最小值,同时允许编译器赋予这些类型更大的尺寸。所以同一个数据类型在不同平台不同操作系统下尺寸大小有可能不同。...整形数和char类型又有带符号的和无符号的之分 short、int、long、long long、char都有带符号和无符号两种。...在计算机中数值是以二进制的形式存储的,带符号的类型第一位是符号位,用于表示正负数,1表示负数,0表示正数;无符号的类型没有符号位,所有位数都用于表示数值的大小。...-2n-1—2n-1-1; 无符号的表示的数值范围是0—2n-1. bool类型是只表示true和false bool是用于表示正确(true)和错误(false)的一种逻辑类型,其中true和
&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,
简介 java中可以被称为Number的有byte,short,int,long,float,double和char,我们在使用这些Nubmer的过程中,需要注意些什么内容呢?一起来看看吧。...注意不要使用0作为除数 我们在使用变量作为除数的时候,一定要注意先判断是否为0. 兼容C++的无符号整数类型 在java中只有16位的char表示的是无符号整数,而int实际上表示的是带符号的整数。...而在C或者C++中是可以直接表示无符号的整数的,那么,如果我们有一个32位的无符号整数,该怎么用java来处理呢?...,我们从Stream中读取一个int值,如果是一个32位的无符号整数,那么读出来int就变成了有符号的负整数,这和我们的期望是相符的。...考虑一下,long是64位的,我们是不是可以使用long来表示32位的无符号整数呢?
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是没有的,目前大部分书,都是认为没有的。因为书,一般都要落后于行业。
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字符。算是留了一个可扩展余地。
long 长整型 定义时,后面加上l或L 有符号与无符号数: unsigned:无符号数,一般用来表示数据 signed:有符号数,一般用来表示数字 整型占位符: int 使用%d unsigned...int 使用%u long 10进制显示:%ld。...如果系统中int与long大小相同,用%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类型的值。
前言 为了能编写出C语言程序,必须具备以下的知识和能力: 要有正确的解题思路,即学会设计算法,否则无从下手; 掌握C语言的语法,知道怎样使用C语言所提供的功能编写出一个完整的、正确的程序; 在写算法和编写程序时...为了充分利用变量的值的范围,可以将变量定义为无符号类型,即在类型符号前面加上修饰符unsigned,表示指定该变量是无符号整数类型;如果加上修饰符signed,则是有符号类型,因此,在以上四种整型数据的基础上可以扩展为以下...[int] 有符号长整型 [signed] long [int] 无符号长整型 unsigned long int 有符号双长整型 [signed] long long [int] 无符号双长整型 unsigned...「总结」:有符号整型数据存储单元中最高位代表符号(0为正,1为负),如果指定为unsigned(无符号)型,存储单元中全部二进制位都用作存放数值本身,而没有符号。...为什么要把常量分为不同的类型呢?在程序中出现的常量是要存放在计算机中的存储单元中的,这就必须确定分配给它多少字节,按什么方式存储。 怎样确定常量的类型呢?从常量的表示形式即可以判定其类型。
单位换算: 1 KB = 1024 byte 1 MB = 1024 KB 在C++种也确保了类型的最小长度 short 至少 16位 int 至少和 short一样长 long至少32位,且至少与int...在大括号内也不包含任何东西。此时变量初始化为零。 变量的初始化的问题,有助于防范类型转换错误。 1.5 无符号类型 优点:可以增大变量能够存储的最大值。...创建无符号类型的变量时,只需要使用unsigned来进行声明即可。 short变量加unsigned和没有unsigned,两者显示结果都是不一样的。...表达式中包含不同的类型时,C++对值进行转换 将参数传递给函数时,由函数原型控制,C++对值进行转换 数值转换中存在的潜在问题 [潜在的数值转换问题.png] 类型的强制转换 强制转换本身不会修改变量本身...强制转换的通用格式如下: (typename) value //来源于C语言 typename (value) // C++ 4.4 C++11中的auto声明 在初始化声明中,如果使用关键字auto
整型 C++提供了好几种整型,可以根据程序的具体需求选择合适的整型。不同C++整型类型占用的内存也不一样,占用内存越大,整型数值的范围也就越大,整型还分为有符号和无符号,即是否可表示正负。...64位 计算机的基本单位是字节 一个字节有8位 一位可以表示0和1,8位单元可以表示0-255或者-128到127 没有申明无符号型的话基本都是有符号类型的,那么我们该如何获取类型的限制信息 头文件climits...<<"h = "<<h<<endl; <em>C</em>++确定常量<em>的</em>类型 程序如何确认常量是按什么类型存储,后缀表明了数字常量<em>的</em><em>符号</em>,如果是l表示<em>long</em>,u表示<em>无</em><em>符号</em>整数。...对于不带后缀<em>的</em>十进制数,,将使用几种类型<em>中</em>可以存储该<em>值</em><em>的</em>最小类型来表示:<em>int</em> <em>long</em> ,<em>long</em> <em>long</em>。...const type name = value;尽量<em>在</em>申明<em>中</em>初始化<em>值</em>
---- printf()函数打印数据指令时要与代打印数据的类型相匹配才行。 如%d %c %ld......这些符号叫做转换说明。代表着数据转化成显示的形式。...使用十六进制数Of %X 无符号十六进制整数,使用十六进制数OF %% 打印一个百分号 %g(或%G) 浮点数不显示无意义的零“0” 其基本格式如下: printf(格式字符串,待打印1,待打印2,....有符号值为负,则在值前面显示负号 空格 :有符号值为正,则在值前面显示前输出一个空格· 有符号值为正,则在值前面显示减号 +标记覆盖一个空格 # /0 ...int类型的值 hh 和整型转换说明一起使用,表示signed char/unsigned char类型的值 l 和整型转换说明一起使用,表示long int/unsigned long int类型的值...ll 和整型转换说明一起使用,表示long long int/unsigned long long int类型的值 L 和浮点型转换说明一起使用,表示long double类型的值 z 和整型转换说明一起使用
领取专属 10元无门槛券
手把手带您无忧上云