long long类型数据两个数相除 商9余4为什么类型

您所在的位置: &
类型说明符:long、long long、short、unsigned 和signed
类型说明符:long、long long、short、unsigned 和signed
电子工业出版社
《C语言程序设计(第4版)》第3章变量、数据类型和算术表达式,本章将会学习:int、float、double、char 和_Bool 数据类型;用short、long 和long long 修改数据类型;变量的命名规则;基本数学运算符和算术表达式;类型转换等。本节为大家介绍类型说明符:long、long long、short、unsigned 和signed。
类型说明符:long、long long、short、unsigned 和signed
如果直接将说明符long 放在int 声明之前,所声明的整型变量将拥有某些计算机系统上的扩展范围。long int 声明的一个示例如下:
long&int&&
这个语句将变量factorial 声明为一个long 整型变量。与float 和double一样,long 变量的具体精度也取决于具体的计算机系统。在许多系统上,int和long int的取值范围相同,都可用于存储最高32 位宽(231.1 或)的整数值。
根据需要在一个整数常量的最后追加一个字母L(大小写均可),可以构成一个long int 类型的值。数字与L 之间不允许存在空格。因此,声明语句
long&int&numberOfPoints&=&L;&
将变量numberOfPoints 声明为long int 类型,其初始值为。要使用printf()显示一个long int 值,可以在整数格式字符i、o 和x 之前以字母l 作为修饰符。这就是说,可以使用格式字符%li 以十进制格式显示一个long int 值,字符%lo 可以八进制格式显示该数值,而字符%lx 可以十六进制格式显示该数值。
还有一种long long 整数数据类型,因此,
long&long&int&maxAllowedS&
将所示变量声明为指定的扩展精度,可以确保这一精度至少宽64 位。为了显示long long 整数,printf 字符串中使用的不再是单个字母l,而是两个l,比如&%lli&。
long 说明符还可以出现在double 声明的前面,如下所示:
long&double&US_deficit_2004;&
long double 常量被写为一个后面紧跟着字母l 或L 的浮点常量,比如
1.234e+7L&
要显示一个long double 值,可使用L 修饰符。因此,%Lf 以浮点表示法显示一个long double 值,%Le 以科学记数法显示同一数值,%Lg 告诉printf()在%Lf 和%Le 之间进行选择。
当int 声明的前面放有说明符short 时,它告诉C 编译器,被声明的变量用于存储相当小的整数值。使用short 变量的动机主要是为了节省内存空间,当程序需要大量内存,而可用内存数量又有限时,内存空间可能会成为一个问题。
在某些计算机上,short int 占用的存储数量是普通int 变量的一半。在任意情况下,都可以保证为short int 分配的空间数量不小于16 位。在C 语言中,没有什么办法可以明确写出一个short int 类型的常量。
要显示一个short int 变量,可以将字母h 放在任何普通整数转换字符的前面:%hi、%ho 或%hx。或者,也可以使用任意整数转换字符来显示short int,这是因为在将short int 作为参数传送给printf()例程时,可以将它们转换为整数。
当一个整型变量仅用于存储正数时,可以用unsigned 说明符放在int变量的前面。声明
unsigned&int&&
向编译器声明,变量counter 仅用于存储正数值。将一个整型变量的应用范围限制在正整数的独占存储中,可以扩展此整型变量的精度。
在常量之后放置字母u(或U),即可构成unsigned int,如下所示:
在写出一个整数常量时,可以结合使用字母u(或U)和l(或L),因此,
是告诉编译器,将常量20000 看作一个unsigned long。
如果一个整数常量的后面没有跟着字母u、U、l 或L 中的任何一个,而且又大得无法装入普通大小的int 中,编译器就会将它看作unsigned int。
如果它因为太大(译者注:原书此处为&小&,疑有误)而无法装入unsignedint 中,编译器就将它看作long int。如果它还不能装在long int 中,编译器就将它当作unsigned long int。如果不能装入unsigned long int中,但能装入long long int 中,编译器就将它看作long long int,否则就看作unsigned long long int。
在将变量声明为long long int、long int、short int 或unsignedint 类型时,可以省略关键字int。因此,unsigned 变量counter 同样可以声明如下:
unsigned&&
char 变量也可以声明为unsigned 的。
可以使用signed 限定符明确地告诉编译器,一个特定变量是有符号量。它主要用在char 声明的前面。深入讨论将推迟到第13 章进行。
如果关于这些说明符的讨论现在对你来说显得有些深奥,也不用担心。在本书的后续章节中,许多不同类型都会在实际程序范例中进行演示。第13 章更详细地讨论了数据类型及其转换。
表3.1 汇总了基本数据类型和限定符。
表3.1 基本数据类型
喜欢的朋友可以添加我们的微信账号:
51CTO读书频道二维码
51CTO读书频道活动讨论群:
【责任编辑: TEL:(010)】&&&&&&
关于&&的更多文章
很久很久以前,冬天爱上了夏天,可是他们始终不能相见,后来,他
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
讲师: 4人学习过讲师: 2人学习过讲师: 18人学习过
《多资产投资:现代投资组合管理实践》作者从自身长年
本书从微信相关应用数据开始,逐步介绍了微信的商业应
本书由浅入深、图文并茂地再现了网络入侵与防御的全过
JBuilder 2006是一款强大的Java企业级开发平台,其集成了几乎所有的Java技术,涵盖了软件开发生命周期的各个过程。本书深入浅出
51CTO旗下网站java代码(10)
long receivedAlarmCount = HistoryMqReceiveAdaptor.getReceivedAlarmCount();
long&alarmsTotal = 10000l;
float percent = BigDecimal.valueOf(receivedAlarmCount).divide(BigDecimal.valueOf(alarmsTotal), 2, BigDecimal.ROUND_HALF_UP).floatValue();&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4943次
排名:千里之外
原创:22篇
(1)(2)(2)(11)(3)(6)(4)&&/&&&&/&&
在C99标准(详情请猛击:)中,增加了对64位长整型数据的支持,它的类型就是 long long,占用8个字节。
由于C99标准发布较晚,一些较老的C/C++编译器不支持,新编译器对C99的响应也没有想象地积极,导致当前主流的C/C++编译器对64位长整型的支持不统一,形态各异。
一般来说,64位整型的定义方式有 long long 和 __int64 两种(VC 6.0 只还支持__int64),而输出方式也有 printf(&%lld&, a)、printf(&%I64d&, a)、cout && a 三种。
这里讨论的是五种常用的C/C++编译器对64位整型的支持,它们分别是gcc(mingw32)、g++(mingw32)、gcc(linux i386)、g++(linux i386)、Microsoft Visual C++ 6.0。可惜的是,没有一种定义和输出方式的组合能同时兼容这五种编译器。如下表所示:
(linux i386)
(linux i386)
printint64()
上表中,正确指编译通过,运行完全正确;错误指编译虽然通过,但运行结果有误;无法编译指编译器根本不能编译完成。
观察上表,我们可以发现以下几点:
long long 定义方式可以用于gcc/g++,不受平台限制,但不能用于 VC6.0。
__int64 是Win32平台编译器64位长整型的定义方式,不能用于Linux。
&%lld&用于Linux i386平台编译器,&%I64d&用于Win32平台编译器。
cout只能用于C++编译,在VC6.0中,cout不支持64位长整型。
表中最后一行输出方式中的printint64()是我自己写的一个函数,可以看出,它的兼容性要好于其他所有的输出方式,它是一段这样的代码:
void printint64(long long a){
if(a &= ){
printf(&%d/n&, a);
printf(&%d&, a/);
printf(&%08d/n&, a%);
这种写法的本质是把较大的64位整型拆分为两个32位整型,然后依次输出,低位的部分要补0。看似很笨的写法,效果如何?
我把它和cout输出方式做了比较,因为它和cout都是C++支持跨平台的。首先printint64()和cout(不清空缓冲区)的运行结果是完全相同的,不会出现错误。我的试验是分别用两者输出1000000个随机数,实际结果是,printint64()在1.5s内跑完了程序,而cout需要2s。cout要稍慢一些,所以在输出大量数据时,要尽量避免使用。
对混乱情况的解释
首先要说的是,和Java等语言不同,C/C++本身并没有规定各数据类型的位数,只是限定了一个大小关系,也就是规定从所占的bit数来说,short &= int &= long &= long long。至于具体哪种类型占用多少位,是由你所用的开发平台的编译器决定的。
在现在的PC上一个通常的标准是,int和long同为32位,long long为64位。但是如果换到其它平台(如ARM)上,这个数字可能会有不同,类型所占的大小可以用sizeof()运算符查看。
long long是C99标准中新引进的数据类型,在古老的VC6.0中并没有这个类型,所以在VC6.0中用&long long&会发生编译错误。为了表示64位整数,VC6里采用的是微软自己搞出来的一个数据类型,叫做__int64,所以如果你是在VC6.0下编译的话,应该用__int64定义64位整型。
新版的Visual Studio已经支持long long了。GCC是支持long long的,我们在win系统中使用的其它IDE如Dev-Cpp, Code::Blocks等等大多是采用的MinGW编译环境,它是与GCC兼容的,所以也支持long long(另外为了与MS兼容,也支持__int64)。如果是在纯的linux下,就只能使用long long了。
关于使用printf的输入输出,这里就有一个更宓那榭觥J导噬现灰亲。饕那衷谟诓僮飨低常喝绻win系统下,那么无论什么编译器,一律用%I64d;如果在linux系统,一律用%lld。这是因为MS提供的msvcrt.dll库里使用的就是%I64d的方式,尽管Dev-Cpp等在语法上支持标准,但也不得不使用MS提供的dll库来完成IO,所以就造成了这种情况。
推荐文章 TOP109659人阅读
编程语言(84)
Java(60)
Java中数据类型分两种:1.基本类型:long,int,byte,float,double2.对象类型:Long,Integer,Byte,Float,Double其它一切java提供的,或者你自己创建的类。其中Long叫 long的包装类。Integer、Byte和Float也类似,一般包装类的名字首写是数值名的大写开头。什么是包装类?在java中有时候的运算必须是两个类对象之间进行的,不充许对象与数字之间进行运算。所以需要有一个对象,这个对象把数字进行了一下包装,这样这个对象就可以和另一个对象进行运算了。比如我们可以定义一个类:public class Long {
public Long (int i){
}这个Long 就是一个包装类,它包装了一个整数值,然后可以在里面写一些运算符重载的方法使它支持某些运算。这个时候可以赋值:Long l = new Long(10);现在变量 l 就是一个对象,不是一个数字。&long是原始数据类型,没有属性方法,只能进行数学运算,Long是long相对应的引用数据类型,它有方法和属性,一个没方法属性,一个有方法属性,这就是它们的区别。看下面的小程序:long l = 1;
Long l1 = new Long(1);
Long l2 = new Long(1);
if (l == l1){
System.out.println(&=====l与l1相等=====&);
if(l == l2){
System.out.println(&=====l与l2相等=====&);
if(l1 == l2){
System.out.println(&=====l1与l2相等=====&);
输出:=====l与l1相等=====
=====l与l2相等=====如果将第三个if语句的条件换成&l1.equals(l2)&,那么输出结果就会变成:=====l与l1相等=====
=====l与l2相等=====
=====l1与l2相等=====由此也能看出,Long定义的变量为一个Long类型的对象;而long定义的变量为一个长整形数值的数值变量。&ID用long还是Long?&hibernate、el表达式等都是包装类型,用Long类型可以减少装箱/拆箱;在hibernate中的自增的hid在实体中的类型要用Long 来定义而不是long。否则在DWR的匹配过程中会出现Marshallingerror:null的错误提示。&到底是选择Long 还是long这个还得看具体环境,如果你认为这个属性不能为null,那么就用long,因为它默认初值为0,如果这个字段可以为null,那么就应该选择Long。&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1246130次
积分:23406
积分:23406
排名:第233名
原创:210篇
评论:4797条
阅读:34088
阅读:36963
文章:19篇
阅读:124096
文章:10篇
阅读:69126
阅读:42329
文章:11篇
阅读:254946
阅读:38413
(1)(2)(1)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(4)(2)(4)(4)(4)(4)(4)(4)(4)(4)(5)(4)(4)(4)(4)(4)(4)(2)(5)(5)}

我要回帖

更多关于 辗转相除 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信