当前位置:文档之家› C语言基本数据类型整型(int)用法详解

C语言基本数据类型整型(int)用法详解

C语言基本数据类型整型(int)用法详解
C语言基本数据类型整型(int)用法详解

C语言基本数据类型:整型(int)用法详解

1. 整型int

C 语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负。int是整型之一,一般被称为整型。以后,在不产生歧义的情况下,我们把整数类型和int都称为整型。

int代表有符号整数,也就是说,用int声明的变量可以是正数,可以是负数,也可以是零,但是只能是整数。标准规定int的最小取值范围是-32767 到32767。int的取值范围因机器而异,但是一定要大于或者等于-32767 到32767。一般来说,int占用一个字的内存空间。因此,字长为16 位(Bit)的旧式IBM 兼容机使用16 位来储存整型int,取值范围是

-32768 到32767 。目前的个人电脑一般都是32 位字长的,这些电脑中,int一般也是32 位的,取值范围是-2147483648 到2147483647。对于使用64 位CPU 的电脑,使用更多位储存int也是很自然的事情,取值范围当然也会更大。

2. 声明int类型的变量

正如我们在以前的教程里看到的那样,int用于声明整型变量:以int打头,后面跟着变量的名字,最后以分号(;)结束。例如:

interns; /* 声明一个变量*/

/* 注意:一定要用逗号(,),不能用分号(;)*/

int hogs, cows, goats; /* 声明三个变量*/

以上声明创建了变量,但是没有给它们提供“值(value)”。在前面的教程中,我们已经用了两种方法使变量获得“值”。一种是赋值:cows = 500; 。另一种是使用scanf函数:scanf( "%d", &goats ); 。下面我们来学习第三种方法。

3. 初始化变量

初始化变量是指给变量赋初值:声明变量的时候,在变量名的后面写上等号(=),然后写下你希望赋予变量的“值”。例如:

int hogs = 21;

int cows = 32, goats = 14;

int dogs, cats = 94;

以上声明创建了变量,并且为这些变量分配了空间,同时也赋了初值。注意,第三行中只有cats 被初始化为94,而dogs 没有被初始化!如下图:

4. int常量

上面的例子中,21、32、14,以及94 都是整数常量。C 语言中,整数常量的默认类型是int。如果整数常量的大小超过了int的取值范围,那么编译器将会把这个整数常量当作long int类型来处理,这个我们后面还会讲到。21、32、14 和94 都在int的取值范围之内,因此它们都是int常量。

5. 输出int型数据

我们可以用printf函数来输出int型数据。正如我们在前面的教程中看到的那样,占位符%d

代表输出的是int型数据,它告诉printf函数在什么地方输出相应的int型数据。%d 也被称为格式限定符(format specifier),因为它指定了printf函数应该使用什么形式来输出数据。printf函数的第一个参数只能是字符串,这个字符串被称为格式串(format string)。格式串中有多少个%d,我们就应该相应地提供多少个int型参数给printf函数。int型参数可以是int型变量,int型常量,以及结果为int型的表达式等。例如:

int year = 2005; /* year 是int型变量*/

printf( "Today is %d-%d-%d ", year, 9, 20 + 9 ); /* 20 + 9 是加法表达式*/

保证格式限定符的数目和参数数目一致是我们的责任,编译器不负责捕捉这种错误!例如:#include

int main(void)

{

int ten = 10, two = 2;

printf("%d minus %d is %d ", ten ); /* 少写了两个参数*/

getchar(); /* 等待用户按回车*/

return 0;

}

这个程序可以通过编译,但是运行结果将会出乎意料,因为我们少写了两个参数。标准规定,如果格式限定符的数目大于参数数目,则printf函数的行为是未定义的;如果参数数目大于格式限定符的数目,则多余的参数会被忽略。

6. 八进制(octal)和十六进制(hexadecimal)

C 语言中,整数常量默认是十进制(decimal)整数。通过在整数常量前面加上特定的前缀,可以把它设定为八进制或者十六进制整数。前缀0x 或者0X 把整数常量设定为十六进制整数。注意,是数字0 ,而不是字母O ,别搞错了哦!例如:十进制的16 用十六进制来表示是0x10 或者0X10 。在整数常量前面加上前缀0 ,表示它是八进制整数。注意,是数字0 ,而不是字母O 。例如:十进制的16 表示为八进制就是020 。

7. 以八进制或者十六进制形式输出数据

使用格式限定符%o 可以以八进制的形式输出整数。注意,是小写字母o ,不是数字0 。使用%x 或者%X 可以以十六进制的形式输出整数。小写x 表示输出使用小写字母,大写X 表示输出使用大写字母。使用%#o,%#x 或者%#X,得到的输出将包括前缀0,0x 或者0X。例如:

#include

int main(void)

{

int x = 200;

printf("dec = %d; octal = %o; hex = %x; HEX = %X ", x, x, x, x);

printf("dec = %d; octal = %#o; hex = %#x; HEX = %#X ", x, x, x, x);

getchar();

return 0;

}

这个程序的输出是:

dec = 200; octal = 310; hex = c8; HEX = C8

dec = 200; octal = 0310; hex = 0xc8; HEX = 0XC8

1. 其它整数类型

int是C 语言的基本整数类型,可以满足我们处理一般数据的需求。C 语言还提供了四个可以修饰int的关键字:short、long、signed,以及unsigned。利用这四个关键字,C 语言标准定义了以下整数类型:

1) short int(可简写为short),和int一样,也是有符号整数

2) long int(简写:long),有符号整数

3) long longint(简写:long long),C99 标准添加的类型,

有符号整数

4) unsigned int(简写:unsigned),无符号整数,不能表示负数

5) unsigned long int(简写:unsigned long),无符号整数,

不能表示负数

6) unsigned short int(简写:unsigned short),无符号整数,

不能表示负数

7) unsigned long longint(简写:unsigned long long),

C99 添加的类型,无符号整数

8) 所有没有标明unsigned 的整数类型默认都是有符号整数。

在这些整数类型前面加上signed 可以使读者更清楚地知道

这些是有符号整数,尽管有没有signed 都表示有符号整数。

例如:signed int等同于int。

一般我们把short 称为短整型,把long 称为长整型,把long long称为超长整型,把int 称为整型。unsigned 打头的那些整数类型统称为无符号整型。例如:我们称unsigned short 为无符号短整型。以此类推。

2. 声明方式

这些整数类型的声明方式与int类型的声明方式一样。例如:

longintestine;

long johns;

shortinterns;

short ribs;

unsignedints_count;

unsigned players;

unsigned long headcount;

unsigned short yesvotes;

long longago; /* C99 特有*/

unsigned long long ego; /* C99 特有*/

如果您的编译器不支持C99 标准,那就不能使用long long和unsigned long long。

3. 取值范围(表示范围)

标准也规定了这些整数类型的最小取值范围。short 的最小表示范围和int一样,都是

-32767 到32767 。也就是-(2^15 - 1)到(2^15 - 1)。其中,2^15表示2 的15 次方。类似地,2 的20 次方记作2^20 ,以此类推。注意:C 语言中2^15 并不表示2 的15 次方,为了书写方便,我们姑且这么表示。long 的最小取值范围是-2147483647 到2147483647 。

也就是-(2^31 - 1) 到(2^31 - 1) 。unsigned short的最小表示范围和unsigned int一样,都是0 到65535(2^16 - 1)。unsigned long 的最小取值范围是0 到4294967295(2^32 - 1)。long long的最小取值范围是-9223372036854775807(-(2^63 - 1))到9223372036854775807(2^63 - 1);unsigned long long是0 到18446744073709551615(2^64 - 1)。

标准规定,int的表示范围不能小于short 的表示范围,long 的表示范围不能小于int的表示范围。这就是说short 型变量占用的空间可能比int型变量少,而long 型变量占用的空间可能比int型变量多。16 位(bit)的计算机中,int和short 一般都是16 位,而long 是32位;32位的计算机中,short一般是16 位,而long和int是32位。TC2(16位的编译器)中,int是16位的;而Dev-C++(32 位的编译器)中,int是32 位的。

使用unsigned int声明的变量只能表示非负整数(0 和正整数)。如果int是16 位的话,那么unsigned int的表示范围是0 到65535(2^16 - 1)。这是因为unsigned 不需要符号位,可以把16 个位全都用于表示整数。而int需要一个位作为符号位,用于表示正负,只有15 个位用于表示整数。

目前,long long一般64 位,long 是32 位,short 是16 位,而int或者16 位,或者32 位。具体某个编译器到底使用多少位来表示这些类型,我们可以用运算符sizeof来获取。例如:

printf( "%lu ", (unsigned long)sizeof(int) * 8 ); /* 输出int的位数*/

printf( "%zu ", sizeof(short) * 8 ); /* 输出short 的位数*/

sizeof运算符返回其操作数占用空间的大小,以字节(Byte)为单位。注意,C 定义字节的大小为char 类型的大小。char 通常是8 位(bit)的,当然也可以更大。这里我们假设char 是8 位的。点击查看char 类型详细介绍

sizeof的用法我们以后会讲到,现在只要有个印象就好了。第二句中的%zu是C99 特有的,如果您的编译器不支持C99(准确地说,应该是如果您的编译器使用的库函数不支持C99),运行结果将会出错。

4. 整数类型的选择

如果您要处理的只是非负整数,那么应该优先使用unsigned 打头的那些整数类型。如果您要处理的整数超出了int所能表示的范围,并且您的编译器中,long 的表示范围比int大,那就使用long。不过,若非必要,尽量不要用long,因为它可能会降低程序运行效率。有一点要注意:如果您的编译器中,long 和int都是32 位的,并且您需要使用32 位整数,那么应该用long,而不要用int。只有这样,我们的程序才可以安全地移植到16 位的计算机,因为16 位的计算机中,int一般也是16 位的。类似地,如果您需要使用64 位整数,那就用long long。如果int是32 位的话,那么使用short 可以节省空间,不过您得确保您要处理的整数不会超出short 的表示范围。这种“节省”对内存大的计算机来说,是没什么意义的。

5. long 型常量和long long型常量

一般来说,整数常量是被当作int类型来存储的。如果我们使用的整数常量超出了int的表示范围,C 语言规定编译器自动使用unsigned int来处理这个常量。如果unsigned 也不足以表示这个常量的话,编译器就会用long。如果还表示不了的话,那就依次用unsigned long,long long,unsigned long long。如果unsigned long long也表示不了,那么编译器就没辙了。注意:long long和unsigned long long是C99 特有的。例如:如果int是16 位的话,它就表示不了常量1000000。编译器会使用long 来处理这个常量,因为unsigned int也表示不了1000000 。

同样,十六进制和八进制整数常量通常也是被作为int来处理。但是,当我们使用的常量超出了int的表示范围后,编译器会依次使用unsigned int,long,unsigned long,long long和unsigned long long。直到所使用的类型足以表示那个常量为止。

有时,我们使用的是较小的常量,但是我们希望这个常量被当作long 来处理,这就需要在这个常量后面加上后缀l(小写字母l)或者L(大写字母L)。我们应该避免使用l ,因为l 容易和数字1 混淆。例如:整数常量7 是被作为int来处理的,但整数常量7L(或者7l)是被作为long 来处理的。类似地,在整数常量后面加上后缀ll或者LL ,这个常量就会被当作long long来处理。例如:3LL 。如果想使用无符号整数常量的话,还要配合使用后缀u 或者U 。例如:2u,3U,4Lu,5ul,6LU,7LLU,8Ull,9uLL 。

这些后缀也可以用于十六进制和八进制整数常量。例如:020L,010LL,0x30uL,0x40ull 。

1. 输出各种整数类型的变量

输出不同类型的整数,需要使用不用的格式限定符。输出unsigned int类型的整数,要用%u 。输出long ,要用%ld;如果要以十六进制或者八进制形式输出,那就用%lx(或者%lX)或者%lo。注意:虽然整数常量的后缀使用大写或者小写英文字母都没关系,但是它们格式限定符必须使用小写!如果我们要输出short 类型的整数,可以在%d 中间加上前缀h,也就是%hd;同理,%ho 和%hx(或者%hX)分别表示以八进制或十六进制形式输出。前缀h 和l 可以和u 组合,表示输出无符号整数。例如:%lu表示输出unsigned long 类型的整数;%hu表示输出unsigned short类型的整数。如果您的编译器支持C99,可以使用%lld 和%llu分别表示输出long long和unsigned long long。下面我们来看一个输出各种类型整数的程序:

#include

int main(void)

{

unsigned int un = 3000000000; /* 我使用的编译器int是32 位的*/

short end = 200; /* 而short 是16 位的*/

long big = 65537;

printf("un = %u and not %d ", un, un);

printf("end = %hd and %d ", end, end);

printf("big = %ld and not %hd ", big, big);

printf("Press ENTER to quit...");

getchar();

return 0;

}

使用Dev-C++ 编译运行这个程序输出结果如下:

un = 3000000000 and not -1294967296

end = 200 and 200

big = 65537 and not 1

Press ENTER to quit...

这个程序表明,错误使用格式限定符会导致意想不到的输出。首先,错误使用%d 来做无符号整型变量un 的格式限定符,导致输出的是负数。这是因为我的计算机使用相同的二进制形式来表示3000000000 和-129496296 ,而计算机只认识二进制。所以,如果我们使用%u 告诉printf输出无符号整数,输出的就是3000000000;如果我们误用了%d,那么输出的就是一个负数。不过,如果我们把代码中的3000000000 改成96 的话,输出就不

会出现异常。因为96 没有超出int的表示范围。

然后,对于第二个printf,无论我们使用%hd还是%d,输出的结果都是一样的。这是因为C 语言标准规定,当short 类型值传递给函数时,要自动转化成int类型值。之所以转化成int,是因为int被设计为计算机处理效率最高的整数类型。所以,对于short 和int大小不同的计算机来说,把变量end 转化成int类型再传递给函数,速度更快。如此说来,h 好像没有存在意义。其实不然。我们可以用%hd来看看较大的整数类型被截断成short 类型的时候会是什么样的。

而第三个printf,由于误用%hd,导致输出是1。这是因为,如果long 是32 位的话,65537 的二进制形式便是0000 0000 0000 0001 0000 0000 0000 0001,而%hd命令printf输出short 类型的值,从而导致printf只处理16 位数据(假设short 是16 位的),最终导致输出1。在前面的教程里,我们说过,保证格式限定符的数目和参数数目一致是我们的责任。同样,保证格式限定符的类型和参数类型一致也是我们的责任!正如上面所说的那样,错误使用格式限定符会导致意想不到的输出!标准规定,如果任意参数和与其对应的格式限定符类型不一致,则printf的行为是未定义的;如果格式限定符本身就是非法的,则printf的行为也是未定义的。

2. 整数溢出

首先请看以下程序:

#include

int main(void)

{

/* 32 位int表示范围的上限和下限*/

int i = 2147483647, j = -2147483648;

unsignedint k = 4294967295, l = 0;

printf("%d %d %d %d ", i, i+1, j, j-1);

printf("%u %u %u %u %u ", k, k+1, k+2, l, l-1);

printf("Press ENTER to quit...");

getchar();

return 0;

}

使用Dev-C++ 编译运行这个程序输出结果如下:

2147483647 -2147483648 -2147483648 2147483647

4294967295 0 1 0 4294967295

Press ENTER to quit...

本例中,i+1 是负数,j-1 是正数,k+1 是0,l-1 是4294967295 。这是因为加减运算过后,它们的值超出了它们对应的那种整数类型的表示范围,我们把这种现象称为溢出。unsigned int型变量的值如果超过了上限,就会返回0,然后从0 开始增大。如果低于下限,那么就会到达unsigned 型的上限,然后从上限开始减小。就好像一个人绕着跑道跑步一样,绕了一圈,又返回出发点。一般,int型变量溢出的话,会变成负数,或者正数。

对于unsigned 类型的整数,它们溢出时的情况一定和上面描述的一样,这是标准规定的。但是标准并没有规定有符号整数溢出时会出现什么情况。这里描述的有符号整数溢出时出现的情况是最常见的,但是在别的计算机,使用别的编译器,也可能出现不同的情况。

补码运算,答案满意再追100,3天内有效

悬赏分:50|解决时间:2009-2-5 08:56 |提问者:lishen226

X = 76, 则[X]补= ?

[X]补= 80H, 则X = ?

[X]补= 98H,则[X]补/2 = ?

X = 78, Y = -83, 则[X+Y]补= ?

问题补充:

我教朋友计算机呢,遇到这几个题,都是N年前学的,都忘光了,最好有个解题步骤,谢谢了!最好能附上补码原码转换的一些知识点,比如负数怎么处理。

最佳答案

对正数而言: [X]原= [X]反= [X]补

对负数而言: [X]反= [X]原符号位不变,尾数按位变反。

[X]补= [X]反末位加“1”,

或[X]补= [X]原符号位不变,尾数按位变反后再加“1”。

[X]原= [X]反符号位不变,尾数按位变反。

[X]原= [[X]补]补即补码的补码,也就是说对负数的补码再求补得到原码。

X = 76 (都用一个字节表示)

则[X]补= [X]原= 01001100B

[X]补= 80H

这是补码的一个特殊情况-128,八位原码和反码都是表示不了这个数的。

[X]补= (10000000)B 按位取反加1后有溢出,但计算机中该补码认定为-128,因此X = -(10000000)B = -128

[X]补= 98H

[X]补= (10011000)B

如果计算机内做除以2的操作,因为计算机本身是将整个码当二进制数对待的,并不区分是什么码(也就是说计算机只认二进制数),所以[X]补/2 是将[X]补每位都算术右移一位(包括符号位)。[X]补/2 = (01001100)B = 4CH。

如果是单求补码值的一半(除2),则可理解为符号位保持不变的算术右移一位,[X]补/2 = (11001100)B = CCH。

X = 78, Y = -83

[X]补= (01001110)B

[Y]补= (10101101)B

[X+Y]补= [X]补+ [Y]补= (01001110)B + (10101101)B = (11111011)B = FBH

补码

[ 转自铁血社区http://bbs.tiexue.ne t/ ]

补码举例

补码(two's complement)

1、在计算机系统中,数值一律用补码来表示(存储)。

主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。

另外,两个用补

码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

2、补码与原码的转换过程几乎是相同的。

[ 转自铁血社区http://bbs.tiexue.ne t/ ]

求给定数值的补码表示分以下两种情况:

(1)正数的补码:与原码相同。

[例1]+9的补码是00001001。

(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。

[例2]求-7的补码。

因为给定数是负数,则符号位为“1”。

[ 转自铁血社区http://bbs.tiexue.ne t/ ]

后七位:+7的原码(0000111)→按位取反(1111000)→加1(1111001)

所以-7的补码是11111001。

已知一个数的补码,求原码的操作分两种情况:

(1)如果补码的符号位为“0”,表示是一个正数,其原码就是补码。

(2)如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。

[例3]已知一个补码为11111001,则原码是10000111(-7)。

[ 转自铁血社区http://bbs.tiexue.ne t/ ]

因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。

其余七位1111001取反后为0000110;

再加1,所以是10000111。

在“闲扯原码、反码、补码”文件中,没有提到一个很重要的概念“模”。我在这里稍微介绍一下“模”

的概念:

“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范

[ 转自铁血社区http://bbs.tiexue.ne t/ ]

围,即都存在一个“模”。例如:

时钟的计量范围是0~11,模=12。

表示n位的计算机计量范围是0~2^(n)-1,模=2^(n)。

“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的

余数。任何有模的计量器,均可化减法为加法运算。

例如:假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:

[ 转自铁血社区http://bbs.tiexue.ne t/ ]

一种是倒拨4小时,即:10-4=6

另一种是顺拨8小时:10+8=12+6=6

在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。

对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特

性。共同的特点是两者相加等于模。

对于计算机,其概念和方法完全一样。n位计算机,设n=8,所能表示的最大数是11111111,若再

[ 转自铁血社区http://bbs.tiexue.ne t/ ]

加1称为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系统的

模为2^8。在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以

了。把补数用到计算机对数的处理上,就是补码。

另外两个概念

一的补码(one's complement) 指的是正数=原码,负数=反码

而二的补码(two's complement) 指的就是通常所指的补码。

[ 转自铁血社区http://bbs.tiexue.ne t/ ]

3.补码的绝对值(称为真值)

[例4]-65的补码是10111111

若直接将10111111转换成十进制,发现结果并不是-65,而是191。

事实上,在计算机内,如果是一个二进制数,其最左边的位是1,则我们可以判定它为负数,并且是用补码表示。

若要得到一个负二进制数的绝对值(称为真值),只要各位(包括符号位)取反,再加1,就得到真值。

如:二进制值:10111111(-65的补码)

[ 转自铁血社区http://bbs.tiexue.ne t/ ]

各位取反:01000000

加1:01000001(+65的补码)

这里补充补码的代数加减运算:

1、补码加法

[X+Y]补= [X]补+ [Y]补

[例5]X=+0110011,Y=-0101001,求[X+Y]补

[ 转自铁血社区http://bbs.tiexue.ne t/ ]

[X]补=00110011 [Y]补=11010111

[X+Y]补= [X]补+ [Y]补= 00110011+11010111=00001010

注:因为计算机中运算器的位长是固定的,上述运算中产生的最高位进位将丢掉,所以结果不是

100001010,而是00001010。

2、补码减法

[X-Y]补= [X]补- [Y]补= [X]补+ [-Y]补

[ 转自铁血社区http://bbs.tiexue.ne t/ ]

其中[-Y]补称为负补,求负补的方法是:所有位(包括符号位)按位取反;然后整个数加1。

[例6]1+(-1)[十进制]

1的原码00000001 转换成补码:00000001

-1的原码10000001 转换成补码:11111111

1+(-1)=0

00000001+111111111=00000000

[ 转自铁血社区http://bbs.tiexue.ne t/ ]

00000000转换成十进制为0

0=0所以运算正确。

这里补充补码的代数解释:

任何一个数都可以表示为-a=2^(n-1)-2^(n-1)-a;

这个假设a为正数,那么-a就是负数。而根据二进制转十进制数的方法,我们可以把a表示为:a=k0*2^0+k1*2^1+k2*2^2+……+k(n-2)*2^(n-2)

这里k0,k1,k2,k(n-2)是1或者0,而且这里设a的二进制位数为n位,即其模为2^(n-1),而2^(n-1)其二项展开是:1+2^0+2^1+2^2+……+2^(n-2),而式子:

-a=2^(n-1)-2^(n-1)-a中,2^(n-1)-a代入

a=k0*2^0+k1*2^1+k2*2^2+……+k(n-2)*2^(n-2)和

2^(n-1)=1+2^0+2^1+2^2+……+2^(n-2)两式,2^(n-1)-a=

(1-k(n-2))*2^(n-2)+(1-k(n-3))*2^(n-3)+……+(1-k2)*2^2+(1-k1)*2^1+(1-k0)*2^0 +1,而这步转化正是取反再加1的规则的代数原理所在。因为这里k0,k1,k2,k3……不是0就是1,所以1-k0,1-k1,1-k2的运算就是二进制下的取反,而为什么要加1,追溯起来就是2^(n-1)的二项展开式最后还有一项1的缘故。而-a=2^(n-1)-2^(n-1)-a中,还有-2^(n-1)这项未解释,这项就是补码里首位的1,首位1在转化为十进制时要乘上2^(n-1),这正是n位二进制的模。

[ 转自铁血社区http://bbs.tiexue.ne t/ ]

不能贴公式,所以看起来很麻烦,如果写成代数式子看起来是很方便的。

注:n位二进制,最高位为符号位,因此表示的数值范围-2^(n-1) ——2^(n-1) -1,所以模为2^(n-1)。上面提到的8位二进制模为2^8是因为最高位非符号位,表示的数值范围为

0——2^8-1。

[转]

原码表示法是机器数的一种简单的表示法。其符号位用0表示正号,用:表示负号,数值一般用二进制形式表示。设有一数为x,则原码表示可记作〔x〕原。

转自铁血社区ttp://bb https://www.doczj.com/doc/8d12051243.html,/ ]

例如,X1= +1010110

X2= 一1001010

其原码记作:

〔X1〕原=[+1010110]原=01010110

〔X2〕原=[-1001010]原=11001010

原码表示数的范围与二进制位数有关。当用8位二进制来表示小数原码时,其表示范围:转自铁血社区ttp://bb https://www.doczj.com/doc/8d12051243.html,/ ]

最大值为0.1111111,其真值约为(0.99)10

最小值为1.1111111,其真值约为(一0.99)10

当用8位二进制来表示整数原码时,其表示范围:

最大值为01111111,其真值为(127)10

最小值为11111111,其真值为(-127)10

在原码表示法中,对0有两种表示形式:

转自铁血社区ttp://bb https://www.doczj.com/doc/8d12051243.html,/ ]

〔+0〕原=00000000

[-0] 原=10000000

(2)补码表示法

机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。设有一数X,则X的补码表示记作〔X〕补。

例如,[X1]=+1010110

[X2]= 一1001010

转自铁血社区ttp://bb https://www.doczj.com/doc/8d12051243.html,/ ]

[X1]原=01010110

[X1]补=01010110

即[X1]原=[X1]补=01010110

[X2] 原= 11001010

[X2] 补=10110101+1=10110110

补码表示数的范围与二进制位数有关。当采用8位二进制表示时,小数补码的表示范围:

转自铁血社区ttp://bb https://www.doczj.com/doc/8d12051243.html,/ ]

最大为0.1111111,其真值为(0.99)10

最小为1.0000000,其真值为(一1)10

采用8位二进制表示时,整数补码的表示范围:

最大为01111111,其真值为(127)10

最小为10000000,其真值为(一128)10

在补码表示法中,0只有一种表示形式:

转自铁血社区ttp://bb https://www.doczj.com/doc/8d12051243.html,/ ]

[+0]补=00000000

[+0]补=11111111+1=00000000(由于受设备字长的限制,最后的进位丢失)

所以有[+0]补=[+0]补=00000000

(3)反码表示法

机器数的反码可由原码得到。如果机器数是正数,则该机器数的反码与原码一样;如果机器数是负数,则该机器数的反码是对它的原码(符号位除外)各位取反而得到的。设有一数X,则X的反码表示记作〔X〕反。

例如:X1= +1010110

转自铁血社区ttp://bb https://www.doczj.com/doc/8d12051243.html,/ ]

X2= 一1001010

〔X1〕原=01010110

[X1]反=〔X1〕原=01010110

[X2]原=11001010

[X2]反=10110101

反码通常作为求补过程的中间形式,即在一个负数的反码的未位上加1,就得到了该负数的补码。

转自铁血社区ttp://bb https://www.doczj.com/doc/8d12051243.html,/ ]

例1. 已知[X]原=10011010,求[X]补。

分析如下:

由[X]原求[X]补的原则是:若机器数为正数,则[X]原=[X]补;若机器数为负数,则该机器数的补码可对它的原码(符号位除外)所有位求反,再在未位加1而得到。现给定的机器数为负数,故有[X]补=[X]原十1,即

[X]原=10011010

[X]反=11100101

十) 1

转自铁血社区ttp://bb https://www.doczj.com/doc/8d12051243.html,/ ]

[X]补=11100110

例2. 已知[X]补=11100110,求〔X〕原。

分析如下:

对于机器数为正数,则〔X〕原=〔X〕补

对于机器数为负数,则有〔X〕原=〔〔X〕补〕补

现给定的为负数,故有:

转自铁血社区ttp://bb https://www.doczj.com/doc/8d12051243.html,/ ]

〔X〕补=11100110

〔〔X〕补〕反=10011001

十) 1

〔〔X〕补〕补=10011010=〔X〕原

C语言关键字共32个

由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static 根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类。 1数据类型关键字 A.基本数据类型(5个) void:声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果 char:字符型类型数据,属于整型数据的一种 int:整型数据,通常为编译器指定的机器字长 float:单精度浮点型数据,属于浮点数据的一种 double:双精度浮点型数据,属于浮点数据的一种 B.类型修饰关键字(4个) short:修饰int,短整型数据,可省略被修饰的int。 long:修饰int,长整形数据,可省略被修饰的int。 signed:修饰整型数据,有符号数据类型 unsigned:修饰整型数据,无符号数据类型 C.复杂类型关键字(5个) struct:结构体声明 union:共用体声明 enum:枚举声明 typedef:声明类型别名 sizeof:得到特定类型或特定类型变量的大小 D.存储级别关键字(6个) auto:指定为自动变量,由编译器自动分配及释放。通常在栈上分配 static:指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部 register:指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数 extern:指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 const:与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变) volatile:与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值 2流程控制关键字

c语言数据类型关键字

1 数据类型关键字(12个): (1) char :声明字符型变量或函数 (2) double :声明双精度变量或函数 (3) enum :声明枚举类型 (4) float:声明浮点型变量或函数 (5) int:声明整型变量或函数 (6) long :声明长整型变量或函数 (7) short :声明短整型变量或函数 (8) signed:声明有符号类型变量或函数 (9) struct:声明结构体变量或函数 (10) union:声明联合数据类型 (11) unsigned:声明无符号类型变量或函数 (12) void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用)(2)控制语句关键字(12个): A循环语句 (1) for:一种循环语句(可意会不可言传) (2) do :循环语句的循环体 (3) while :循环语句的循环条件 (4) break:跳出当前循环 (5) continue:结束当前循环,开始下一轮循环 B条件语句 (1)if: 条件语句 (2)else :条件语句否定分支(与if 连用) (3)goto:无条件跳转语句 C开关语句 (1)switch :用于开关语句 (2)case:开关语句分支 (3)default:开关语句中的“其他”分支 D return :子程序返回语句(可以带参数,也看不带参数) 3 存储类型关键字(4个) (1)auto :声明自动变量一般不使用 (2)extern:声明变量是在其他文件正声明(也可以看做是引用变量) (3)register:声明积存器变量 (4)static :声明静态变量 4 其它关键字(4个): (1)const :声明只读变量 (2)sizeof:计算数据类型长度 (3)typedef:用以给数据类型取别名(当然还有其他作用 (4)volatile:说明变量在程序执行中可被隐含地改变

C语言的基本数据类型及其表示

3.2 C语言的基本数据类型及其表示 C语言的基本数据类型包括整型数据、实型数据和字符型数据,这些不同数据类型如何表示?如何使用?它们的数据范围是什么?下面我们分别进行介绍。 3.2.1 常量与变量 1. 常量 常量是指程序在运行时其值不能改变的量,它是C语言中使用的基本数据对 象之一。C语言提供的常量有: 以上是常量所具有的类型属性,这些类型决定了各种常量所占存储空间的大小和数的表示范围。在C程序中,常量是直接以自身的存在形式体现其值和类型,例如:123是一个整型常量,占两个存储字节,数的表示范围是-32768~32767;123.0是实型常量,占四个存储字节,数的表示范围是-3.4 10-38~3.4 1038。 需要注意的是,常量并不占内存,在程序运行时它作为操作对象直接出现在运算器的各种寄存器中。 2.符号常量 在C程序中,常量除了以自身的存在形式直接表示之外,还可以用标识符来表示常量。因为经常碰到这样的问题:常量本身是一个较长的字符序列,且在程序中重复出现,例如:取常数的值为3.1415927,如果在程序中多处出现,直接使用3.1415927的表示形式,势必会使编程工作显得繁琐,而且,当需要把的值修改为3.1415926536时,就必须逐个查找并修改,这样,会降低程序的可修改性和灵活性。因此,C语言中提供了一种符号常量,即用指定的标识符来表示某个常量,在程序中需要使用该常量时就可直接引用标识符。 C语言中用宏定义命令对符号常量进行定义,其定义形式如下: #define 标识符常量 其中#define是宏定义命令的专用定义符,标识符是对常量的命名,常量可以是前面介绍的几种类型常量中的任何一种。该使指定的标识符来代表指定的常量,这个被指定的标识符就称为符号常量。例如,在C程序中,要用PAI代表实型常量3.1415927,用W代表字符串常量"Windows 98",可用下面两个宏定义命令: #define PAI 3.1415927 #define W "Windows 98" 宏定义的功能是:在编译预处理时,将程序中宏定义(关于编译预处理和宏定义的概念详见9.10节)命令之后出现的所有符号常量用宏定义命令中对应的常量一一替代。例如,对于以上两个宏定义命令,编译程序时,编译系统首先将程序中除这两个宏定义命令之外的所有PAI替换为3.1415927,所有W替换为Windows 98。因此,符号常量通常也被称为宏替换名。 习惯上人们把符号常量名用大写字母表示,而把变量名用小写字母表示。例3-1是符号常量的一个简单的应用。其中,PI为定义的符号常量,程序编译时,用3.1416替换所有的PI。 例3-1:已知圆半径r,求圆周长c和圆面积s的值。

C语言的基本数据类型及其表示

3.2C语言的基本数据类型及其表示 C语言的基本数据类型包括整型数据、实型数据和字符型数据,这些不同数据类型如何表示?如何使用?它们的数据范围是什么?下面我们分别进行介绍。 3.2.1常量与变量 1.常量 常量是指程序在运行时其值不能改变的量,它是C语言中使用的基本数据对 象之一。C语言提供的常量有: 以上是常量所具有的类型属性,这些类型决定了各种常量所占存储空间的大小和数的表示范围。在C程序中,常量是直接以自身的存在形式体现其值和类型,例如:123是一个整型常量,占两个存储字节,数的表示范围是-32768~32767;123.0是实型常量,占四个存储字节,数的表示范围是-3.410-38~3.41038。 需要注意的是,常量并不占内存,在程序运行时它作为操作对象直接出现在运算器的各种寄存器中。 2.符号常量 在C程序中,常量除了以自身的存在形式直接表示之外,还可以用标识符来表示常量。因为经常碰到这样的问题:常量本身是一个较长的字符序列,且在程序中重复出现,例如:取常数的值为3.1415927,如果在程序中多处出现,直接使用3.1415927的表示形式,势必会使编程工作显得繁琐,而且,当需要把的值修改为3.1415926536时,就必须逐个查找并修改,这样,会降低程序的可修改性和灵活性。因此,C语言中提供了一种符号常量,即用指定的标识符来表示某个常量,在程序中需要使用该常量时就可直接引用标识符。 C语言中用宏定义命令对符号常量进行定义,其定义形式如下: #define标识符常量 其中#define是宏定义命令的专用定义符,标识符是对常量的命名,常量可以是前面介绍的几种类型常量中的任何一种。该使指定的标识符来代表指定的常量,这个被指定的标识符就称为符号常量。例如,在C程序中,要用PAI代表实型常量3.1415927,用W代表字符串常量"Windows98",可用下面两个宏定义命令: #define PAI3.1415927 #define W"Windows98" 宏定义的功能是:在编译预处理时,将程序中宏定义(关于编译预处理和宏定义的概念详见9.10节)命令之后出现的所有符号常量用宏定义命令中对应的常量一一替代。例如,对于以上两个宏定义命令,编译程序时,编译系统首先将程序中除这两个宏定义命令之外的所有PAI替换为3.1415927,所有W替换为Windows98。因此,符号常量通常也被称为宏替换名。 习惯上人们把符号常量名用大写字母表示,而把变量名用小写字母表示。例3-1是符号常量的一个简单的应用。其中,PI为定义的符号常量,程序编译时,用3.1416替换所有的PI。 例3-1:已知圆半径r,求圆周长c和圆面积s的值。

C语言数据类型及表示范围

C语言各种数据类型在系统中占的字节和取值围 基本类型包括字节型(char)、整型(int)和浮点型(float/double)。 定义基本类型变量时,可以使用符号属性signed、unsigned(对于char、int),和长度属性short、long(对于int、double)对变量的取值区间和精度进行说明。 下面列举了Dev-C++下基本类型所占位数和取值围: 符号属性长度属性基本型所占位数取值围输入符举例输出符举例-- -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u signed -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u unsigned -- char 8 0 ~ 2^8-1 %c %c、%d、%u [signed] short [int] 16 -2^15 ~ 2^15-1 %hd unsigned short [int] 16 0 ~ 2^16-1 %hu、%ho、%hx [signed] -- int 32 -2^31 ~ 2^31-1 %d unsigned -- [int] 32 0 ~ 2^32-1 %u、%o、%x [signed] long [int] 32 -2^31 ~ 2^31-1 %ld unsigned long [int] 32 0 ~ 2^32-1 %lu、%lo、%lx [signed] long long [int] 64 -2^63 ~ 2^63-1 %I64d unsigned long long [int] 64 0 ~ 2^64-1 %I64u、%I64o、%I64x -- -- float 32 +/- 3.40282e+038 %f、%e、%g -- -- double 64 +/- 1.79769e+308 %lf、%le、%lg %f、%e、%g -- long double 96 +/- 1.79769e+308 %Lf、%Le、%Lg 几点说明: 1. 注意! 表中的每一行,代表一种基本类型。“[]”代表可省略。 例如:char、signed char、unsigned char是三种互不相同的类型; int、short、long也是三种互不相同的类型。可以使用C++的函数重载特性进行验证,如: void Func(char ch) {} void Func(signed char ch) {} void Func(unsigned char ch) {} 是三个不同的函数。

C语言的32个关键字和9种控制语句

C语言的32个关键字和9种控制语句 C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。 1 数据类型关键字(12个): (1) char :声明字符型变量或函数 (2) double :声明双精度变量或函数 (3) enum :声明枚举类型 (4) float:声明浮点型变量或函数 (5) int:声明整型变量或函数 (6) long :声明长整型变量或函数 (7) short :声明短整型变量或函数 (8) signed:声明有符号类型变量或函数 (9) struct:声明结构体变量或函数 (10) union:声明共用体(联合)数据类型 (11) unsigned:声明无符号类型变量或函数 (12) void :声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用) 2控制语句关键字(12个): A循环语句 (1) for:一种循环语句(可意会不可言传) (2) do :循环语句的循环体 (3) while :循环语句的循环条件 (4) break:跳出当前循环 (5) continue:结束当前循环,开始下一轮循环 B条件语句 (1)if: 条件语句 (2)else :条件语句否定分支(与if 连用) (3)goto:无条件跳转语句 C开关语句 (1)switch :用于开关语句 (2)case:开关语句分支 (3)default:开关语句中的“其他”分支 D返回语句 return :子程序返回语句(可以带参数,也看不带参数) 3 存储类型关键字(4个) (1)auto :声明自动变量一般不使用 (2)extern:声明变量是在其他文件正声明(也可以看做是引用变量)

C语言数据类型与表达式习题及答案

第一章数据类型,运算符与表达式 一.选择题 1.不合法的常量是A。 A)‘/2’B) “”C)‘’D)“483” 2. B 是C语言提供的合法的数据类型关键字。 A)Float B)signed C)integer D)Char 3.在以下各组标识符中,合法的标识符是(1)A,(2) C ,(3) D 。 (1)A)B01 B)table_1 C)0_t D)k% Int t*.1 W10 point (2)A)Fast_ B)void C)pbl D) Fast+Big abs fabs beep (3)A)xy_ B)longdouble C)*p D)CHAR 变量1 signed history Flaut 4. 不属于合法的C语言长整型常量的是 C 。 A)5876273 B)0L C)2E10 D)(long)5876273 7.下面选项中,均是合法浮点数的是 B 。 A)+1e+1 B)-0.60 C)123e D)-e3 5e-9.4 12e-4 1.2e-.4 .8e-4 03e2 -8e5 +2e-1 5.e-0 8.在C语言中,要求参加运算的数必须是整数的运算符是 C 。 A)/ B)* C)% D) = 9.在C语言中,字符型数据在内存中以 D 形式存放。 A)原码B)BCD码C)反码D)ASCII码10.下列语句中,符合语法的赋值语句是 C 。 A)a=7+b+c=a+7;B)a=7+b++=a+7; C)a=7+b,b++,a+7;D)a=7+b = c=a+7; 11. B 是非法的C语言转义字符。 A)‘\b’B)‘\0xf’C)‘\037’D)‘\’’12.对于语句:f=(3.0,4.0,5.0),(2.0,1.0,0.0);的判断中, B 是正确的。 A)语法错误B)f为5.0 C)f为0.0 D)f为2.0 13.与代数式x y u v ? ? 不等价的C语言表达式是A。 A)x*y/u*v B)x*y/u/v C)x*y/(u*v) D)x/(u*v)*y 14.在C语言中,数字029是一个 D 。 A)八进制数B)十六进制数C)十进制数D)非法数 16.对于char cx=?\039?;语句,正确的是A。 A)不合法B)cx的值是?\03? C)cx的值为四个字符D)cx的值为三个字符 17.若int k=7,x=12;则能使值为3的表达式是 D 。 A)x%=(k%=5) B)x%=(k-k%5) C)x%=k-k%5 D)(x%=k)-(k%=5) 18.为了计算s=10!(即10的阶乘),则s变量应定义为 C 。 A)int B)unsigned C)long D)以上三种类型均可

C语言基本数据类型及运算题库

第二章基本数据类型及运算 一、选择题 1. 若以下选项中的变量已正确定义,则正确的赋值语句是。 A) x1=26.8%3; B) 1+2=x2; C) x3=0x12; D) x4=1+2=3; 答案:C 2. 设变量x为float型且已经赋值,则以下语句中能够将x中的数值保留到小数点后面两位,并将第三位四舍五入的是。 A) x=x*100+0.5/100.0 B) x=(x*100+0.5)/100.0 C) x=(int)(x*100+0.5)/100.0 D) x=(x/100+0.5)*100.0 答案:C 3. 下列C语言中运算对象必须是整型的运算符是。 A) %= B) / C) = D) *= 答案:A 4. 若有以下程序段:int c1=1,c2=2,c3;c3=1.0/c2*c1;则执行后,c3中的值是。 A) 0 B) 0.5 C) 1 D) 2 答案:A 5. 设x和y均为int型变量,则以下语句:x+=y; y=x-y; x-=y; 的功能是。 A) 把x和y按从大到小排列 B) 把x和y按从小到大排列 C) 无确定结果 D) 交换x和y中的值 答案:D 6. 下列变量定义中合法的是。 A)short_a=1-.le-1; B)double b=1+5e2.5; C)long do=0xfdaL; D)float 2_and=1-e-3; 答案:A 7. 以下4个选项中,不能被看作是一条语句的是。 A) {;} B) a=0,b=0,c=0; C) if (a>0); D) if (b==0)m=1;n=2; 答案:D 8. 设x=1,y=-1,下列表达式中解为8的是。 A)x&y B)~x│x C)x^x D)x<<=3 答案:D 9. 在C语言中不合法的整数是。 A)20 B)0x4001 C)08 D)0x12ed 答案: C 10. 以下选项中不正确的实型常量是 A)2.607E-1 B)0.8103e0.2 C)-77.77 D)456e –2 答案:B) 11.若变量已正确定义并赋值,符合C语言语法的表达式是 A)a=a+7 B)a=7+b+c,a++ C)int(12.3%4) D)a=a+7=c+b 答案:B) 12.以下十六进制数中不合法的是 A)oxff B)0Xabc C)0x11 D)0x19

c语言关键字及常用符号

C语言关键字及常用符号 32个关键字 auto :声明自动变量 short :声明短整型变量或函数 int:声明整型变量或函数 long :声明长整型变量或函数 float:声明浮点型变量或函数 double :声明双精度变量或函数 char :声明字符型变量或函数 struct:声明结构体变量或函数 union:声明共用数据类型 enum :声明枚举类型 typedef:用以给数据类型取别名 const :声明只读变量 unsigned:声明无符号类型变量或函数 signed:声明有符号类型变量或函数 extern:声明变量是在其他文件中声明 register:声明寄存器变量 static :声明静态变量 volatile:说明变量在程序执行中可被隐含地改变 void :声明函数无返回值或无参数,声明无类型指针 if:条件语句 else :条件语句否定分支(与 if 连用) switch :用于开关语句 case:开关语句分支 for:一种循环语句 do :循环语句的循环体 while :循环语句的循环条件 goto:无条件跳转语句 continue:结束当前循环,开始下一轮循环 break:跳出当前循环 default:开关语句中的“其他”分支 sizeof:计算数据类型长度 return :子程序返回语句(可以带参数,也可不带参数)循环条件 数据类型 char:字符型 int:基本整型 short int:短整型 long int:长整型

unsigned:无符号型 unsigned long:无符号长整型 float:单精度实型 double:双精度实型 C语言常用转义字符表 转义字符含义ASCII码(16/10进制) \o 空字符(NULL) 00H/0 \n 换行符(LF) 0AH/10 \r 回车符(CR) 0DH/13 \t 水平制表符(HT) 09H/9 \v 垂直制表(VT) 0B/11 \a 响铃(BEL) 07/7 \b 退格符(BS) 08H/8 \f 换页符(FF) 0CH/12 \’单引号27H/39 \”双引号22H/34 \\ 反斜杠5CH/92 \? 问号字符3F/63 \ddd 任意字符三位八进制 \xhh 任意字符二位十六进制 字符常量中使用单引号和反斜杠以及字符常量中使用双引号和反斜杠时,都必须使用转义字符表示,即在这些字符前加上反斜杠。 在C程序中使用转义字符\ d d d或者\ x h h可以方便灵活地表示任意字符。C语言的运算符可分为以下几类: 算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。 关系运算符:用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。 逻辑运算符:用于逻辑运算。包括与(&&)、或(||)、非(!)三种。 位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。 赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。 条件运算符:这是一个三目运算符,用于条件求值(?:)。

C语言数据类型及转换23页word文档

C语言的数据类型 C语言提供的数据结构,是以数据类型形式出现的。具体分类如下:1.基本类型 分为整型、实型(又称浮点型)、字符型和枚举型四种。 2.构造类型 分为数组类型、结构类型和共用类型三种。 3.指针类型。在第9章中介绍。 4.空类型 C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。本章将介绍基本类型中的整型、实型和字符型三种数据。 2.3 常量和变量 2.3.1 常量 1.常量的概念 在程序运行过程中,其值不能被改变的量称为常量。 2.常量的分类 (1)整型常量 (2)实型常量 (3)字符常量。 (4)符号常量。 常量的类型,可通过书写形式来判别。 2.3.2 变量 1.变量的概念

在程序运行过程中,其值可以被改变的量称为变量。 2.变量的两个要素 (1)变量名。每个变量都必须有一个名字──变量名,变量命名遵循标识符命名规则。 (2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。 3.标识符命名规则 (1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。 (2)有效长度:随系统而异,但至少前8个字符有效。如果超长,则超长部分被舍弃。 例如,由于student_name和student_number的前8个字符相同,有的系统认为这两个变量,是一回事而不加区别。 在TC V2.0中,变量名(标识符)的有效长度为1~32个字符,缺省值为32。 (3)C语言的关键字不能用作变量名。 注意:C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。 习惯上,变量名和函数名中的英文字母用小写,以增加可读性。 思考题:在C语言中,变量名total与变量名TOTAL、ToTaL、tOtAl等是同一个变量吗? 标识符命名的良好习惯──见名知意:

C语言基本数据类型简介

C语言基本数据类型简介 1.概述 C 语言包含的数据类型如下图所示: 2.各种数据类型介绍 2.1整型 整形包括短整型、整形和长整形。 2.1.1短整形 short a=1; 2.1.2整形 一般占4个字节(32位),最高位代表符号,0表示正数,1表示负数,取值围是 -2147483648~2147483647,在存中的存储顺序是地位在前、高位在后,例如0x12345678在存中的存储如下: 地址:0x0012ff780x0012ff790x0012ff7a0x0012ff7b 数据:78563412 定义:用int关键字,举例如下: int a=6; 2.1.3长整形 long a=10; 2.2浮点型 浮点型包括单精度型和双精度型。 2.2.1单精度型 浮点型,又称实型,也称单精度。一般占4个字节(32位), float a=4.5; 地址:0x0012ff780x0012ff790x0012ff7a0x0012ff7b 数据:00009040 2.2.2双精度型 一般占8个字节(64位) double a=4.5;

地址:0x0012ff780x0012ff790x0012ff7a0x0012ff7b0x0012ff7c 0x0012ff7d0x0012ff7e0x0012ff7f 数据:0000000000 001240 2.3字符类型 在各种不同系统中,字符类型都占一个字节(8位)。定义如下: char c='a'; 也可以用字符对应的ASCII码赋值,如下: char c=97; 3.数据类型与“模子” short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。 怎么去理解它们呢? 举个例子:见过藕煤球的那个东西吧?(没见过?煤球总见过吧)。那个东西叫藕煤器,拿着它在和好的煤堆里这么一咔,一个煤球出来了。半径12cm,12 个孔。不同型号的藕煤器咔出来的煤球大小不一样,孔数也不一样。这个藕煤器其实就是个模子。 现在我们联想一下,short、int、long、char、float、double 这六个东东是不是很像不同类型的藕煤器啊?拿着它们在存上咔咔咔,不同大小的存就分配好了,当然别忘了给它们取个好听的名字。 在32 位的系统上 short 短整型的存2 byte; int 整型的存4 byte; long 长整型的存4 byte; float 单精度浮点型的存4byte;仅能接收7位有效数字 double 双精度浮点型的存8 byte;可以接收16位有效数字 char字符型的存1 byte。 fabs单精度浮点型存4byte. (注意这里指一般情况,可能不同的平台还会有所不同,具体平台可以用sizeof 关键字测试一下) 很简单吧?咔咔咔很爽吧?是很简单,也确实很爽,但问题就是你咔出来这么多存块,你总不能

C语言关键字(详细)

auto:声明自动变量 struct:声明结构体变量或函数 union:声明共用数据类型 enum:声明枚举类型 typedef:用以给数据类型取别名 const:声明只读变量 extern:声明变量是在其他文件中声明register:声明寄存器变量 static:声明静态变量 volatile:说明变量在程序执行中可被隐含地改变goto:无条件跳转语句 short:声明短整型变量或函数 int:声明整型变量或函数 long:声明长整型变量或函数 float:声明浮点型变量或函数 double:声明双精度变量或函数 char:声明字符型变量或函数 unsigned:声明无符号类型变量或函数 signed:声明有符号类型变量或函数 void:声明函数无返回值或无参数,声明无类型指针 if:条件语句 else:条件语句否定分支(与if连用) switch:用于开关语句 case:开关语句分支 for:一种循环语句 do:循环语句的循环体 while:循环语句的循环条件 continue:结束当前循环,开始下一轮循环 break:跳出当前循环 default:开关语句中的“其他”分支 sizeof:计算数据类型长度

return:子程序返回语句(可以带参数,也可不带参数)循环条件 1数据类型关键字(12个): (1)char:声明字符型变量或函数 (2)double:声明双精度变量或函数 (3)enum:声明枚举类型 (4)float:声明浮点型变量或函数 (5)int:声明整型变量或函数 (6)long:声明长整型变量或函数 (7)short:声明短整型变量或函数 (8)signed:声明有符号类型变量或函数 (9)struct:声明结构体变量或函数 (10)union:声明共用体(联合)数据类型 (11)unsigned:声明无符号类型变量或函数 (12)void:声明函数无返回值或无参数,声明无类型指针(基本上就这三个作用) 2控制语句关键字(12个): A循环语句 (1)for:一种循环语句(可意会不可言传) (2)do:循环语句的循环体 (3)while:循环语句的循环条件 (4)break:跳出当前循环 (5)continue:结束当前循环,开始下一轮循环 B条件语句 (1)if:条件语句 (2)else:条件语句否定分支(与if连用) (3)goto:无条件跳转语句

C语言基本数据类型及运算题库1

基本数据类型及运算 一、选择题 1.若以下选项中的变量已正确定义,则正确的赋值语句是。 A)x1=26.8%3;B)1+2=x2;C)x3=0x12;D)x4=1+2=3; 答案:C 2.设变量x为float型且已经赋值,则以下语句中能够将x中的数值保留到小数点后面两位,并将第三位四舍五入的是。 A)x=x*100+0.5/100.0B)x=(x*100+0.5)/100.0 C)x=(int)(x*100+0.5)/100.0D)x=(x/100+0.5)*100.0 答案:C 3.下列C语言中运算对象必须是整型的运算符是。 A)%=B)/C)=D)*= 答案:A 4.若有以下程序段:int c1=1,c2=2,c3;c3=1.0/c2*c1;则执行后,c3中的值是。 A)0B)0.5C)1D)2 答案:A 5.设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是。 A)把x和y按从大到小排列B)把x和y按从小到大排列 C)无确定结果D)交换x和y中的值 答案:D 6.下列变量定义中合法的是。 A)short_a=1-.le-1;B)double b=1+5e2.5; C)long do=0xfdaL;D)float2_and=1-e-3; 答案:A 7.以下4个选项中,不能被看作是一条语句的是。 A){;}B)a=0,b=0,c=0; C)if(a>0);D)if(b==0)m=1;n=2; 答案:D 8.设x=1,y=-1,下列表达式中解为8的是。 A)x&y B)~x│x C)x^x D)x<<=3 答案:D 9.在C语言中不合法的整数是。 A)20B)0x4001C)08D)0x12ed 答案:C 10.以下选项中不正确的实型常量是 A)2.607E-1B)0.8103e0.2C)-77.77D)456e–2 答案:B) 11.若变量已正确定义并赋值,符合C语言语法的表达式是 A)a=a+7B)a=7+b+c,a++ C)int(12.3%4)D)a=a+7=c+b 答案:B) 12.以下十六进制数中不合法的是 A)oxff B)0Xabc C)0x11D)0x19

c语言基本数据类型

c语言基本数据类型short、int、long、char、float、double C 语言包含的数据类型如下图所示:

一、数据类型与“模子” short、int、long、char、float、double 这六个关键字代表C 语言里的六种基本数据类型。 怎么去理解它们呢? 举个例子:见过藕煤球的那个东西吧?(没见过?煤球总见过吧)。那个东西叫藕煤器,拿着它在和好的煤堆里这么一咔,一个煤球出来了。半径12cm,12 个孔。不同型号的藕煤器咔出来的煤球大小不一样,孔数也不一样。这个藕煤器其实就是个模子。 现在我们联想一下,short、int、long、char、float、double 这六个东东是不是很像不同类型的藕煤器啊?拿着它们在内存上咔咔咔,不同大小的内存就分配好了,当然别忘了给它们取个好听的名字。 在32 位的系统上short 咔出来的内存大小是2 个byte; int 咔出来的内存大小是4 个byte; long 咔出来的内存大小是4 个byte; float 咔出来的内存大小是4 个byte; double 咔出来的内存大小是8 个byte; char 咔出来的内存大小是1 个byte。 (注意这里指一般情况,可能不同的平台还会有所不同,具体平台可以用sizeof 关键字测试一下) 很简单吧?咔咔咔很爽吧?是很简单,也确实很爽,但问题就是你咔出来这么多内存块,你总不能给他取名字叫做x1,x2,x3,x4,x5…或者长江1 号,长江2 号…吧。它们长得这么像(不是你家的老大,老二,老三…),过一阵子你就会忘了到底哪个名字和哪个内存块匹配了(到底谁嫁给谁了啊?^_^)。所以呢,给他们取一个好的名字绝对重要。下面我们就来研究研究取什么样的名字好。 二、变量的命名规则 1、命名应当直观且可以拼读,可望文知意,便于记忆和阅读。 标识符最好采用英文单词或其组合,不允许使用拼音。程序中的英文单词一般不要太复杂,用词应当准确。

c语言32位关键字的意思

1 数据类型关键字 A.基本数据类型(5个) void :声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果 char :字符型类型数据,属于整型数据的一种 int :整型数据,通常为编译器指定的机器字长 float :单精度浮点型数据,属于浮点数据的一种 double :双精度浮点型数据,属于浮点数据的一种 B .类型修饰关键字(4个) short :修饰int,短整型数据,可省略被修饰的int。 long :修饰int,长整形数据,可省略被修饰的int。 signed :修饰整型数据,有符号数据类型 unsigned :修饰整型数据,无符号数据类型 C .复杂类型关键字(5个) struct :结构体声明 union :共用体声明 enum :枚举声明 typedef :声明类型别名 sizeof :得到特定类型或特定类型变量的大小 D .存储级别关键字(6个) auto :指定为自动变量,由编译器自动分配及释放。通常在栈上分配 static :指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部 register :指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数 extern :指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 const :与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变) volatile :与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值 2 流程控制关键字 A .跳转结构(4个) return :用在函数体中,返回特定值(或者是void值,即不返回值) continue :结束当前循环,开始下一轮循环 break :跳出当前循环或switch结构 goto :无条件跳转语句 B .分支结构(5个) if :条件语句,后面不需要放分号 else :条件语句否定分支(与if连用) switch :开关语句(多重分支语句) case :开关语句中的分支标记 default :开关语句中的“其他”分支,可选。 C .循环结构(3个) for:for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件。

02 C语音基本数据类型

C语言基本数据类型 一、选择题 1. 合法的用户定义标识符是( ) A. P-S B. putchar C. double D. 908 2. 关于C语言用户标识符的叙述正确的是( ) A. 用户标识符中可以出现下划线和中划线(减号) B. 用户标识符中不可以出现中划线,但可以出现下划线 C. 用户标识符中可以出现下划线,但不可以放在用户标识符的开头 D. 用户标识符中可以出现下划线和数字,它们都可以放在用户标示符的开头 3. 若有定义int a,变量a占用内存的2个字节,则a所能存储数据的最小值为( ) A.0 B. -32767 C.-32768 D. -65535 4. C语言中转义字符非法的是( ) A. …\t? B. …abc? C. …\0xaf? D. …\f? 5. 变量定义合法的是( ) A. short aL=5678 B. double b=1+5e2.5 C. long do=0xfdaL D. float 2_and=1e-3 6. 语句“printf(“a\bre\?hi\?y\\\bou\n”);”的输出结果是( ) A. a\bre\?hi\?y\\\bou B. a\bre\?hi\?y\bou C. re?hi?you D. abre?hi?y\bou 7. 若有说明语句“char a=?\285?;”则变量a ( ) A. 包含1个字符 B. 包含2个字符 C. 包含3个字符 D. 说明不合法 8. 数值最大的是( ) A. 74 B. 074 C. ...\101? D. (x43) 9. 下列符号串与45.67不同的常量是( ) A. 4.567e1 B. “45.67” C. .4567E2 D. 4567E-2 10. 以下叙述正确的是( ) A. a是实型变量,因此C语言不允许进行赋值a=10; B. 在赋值表达式中,赋值符号右边可以是变量、也可以是常量或表达式 C. 在赋值表达式中,赋值符号左边可以是变量、也可以是常量或表达式 D. 已有a=3,当执行了表达式a+6之后,使a中的值为9 11. 下面这段程序中的( )属于常量 main() { int sum; sum=10+sum;

C语言关键词解释

C语言关键词解释 1 数据类型关键字 A基本数据类型(5个) void :声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果char :字符型类型数据,属于整型数据的一种 int :整型数据,通常为编译器指定的机器字长 float :单精度浮点型数据,属于浮点数据的一种 double :双精度浮点型数据,属于浮点数据的一种 B 类型修饰关键字(4个) short :修饰int,短整型数据,可省略被修饰的int。 long :修饰int,长整形数据,可省略被修饰的int。 signed :修饰整型数据,有符号数据类型 unsigned :修饰整型数据,无符号数据类型 C 复杂类型关键字(5个) struct :结构体声明 union :共用体声明 enum :枚举声明 typedef :声明类型别名 sizeof :得到特定类型或特定类型变量的大小 D 存储级别关键字(6个) auto :指定为自动变量,由编译器自动分配及释放。通常在栈上分配 static :指定为静态变量,分配在静态变量区,修饰函数时,指定函数作用域为文件内部

register :指定为寄存器变量,建议编译器将变量存储到寄存器中使用,也可以修饰函数形参,建议编译器通过寄存器而不是堆栈传递参数 extern :指定对应变量为外部变量,即标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 const :与volatile合称“cv特性”,指定变量不可被当前线程/进程改变(但有可能被系统或其他线程/进程改变) volatile :与const合称“cv特性”,指定变量的值有可能会被系统或其他进程/线程改变,强制编译器每次从内存中取得该变量的值 2 流程控制关键字 A 跳转结构(4个) return :用在函数体中,返回特定值(或者是void值,即不返回值) continue :结束当前循环,开始下一轮循环 break :跳出当前循环或switch结构 goto :无条件跳转语句 B 分支结构(5个) if :条件语句 else :条件语句否定分支(与if连用) switch :开关语句(多重分支语句) case :开关语句中的分支标记 default :开关语句中的“其他”分治,可选。 C 循环结构(3个) for :for循环结构,for(1;2;3)4;的执行顺序为1->2->4->3->2...循环,其中2为循环条件 do :do循环结构,do 1 while(2); 的执行顺序是 1->2->1...循环,2为循环条件

数据结构中用到的 C语言基本知识

《数据结构》中必要的C语言基本知识 有必要将数据结构所必须使用的C语言语法在此做简单介绍。根据多年教学实践,学生完成上机实验练习时遇到的主要问题是,不能正确的输入数据,结构体概念陌生,函数的传址调用概念不清,指针与链表有的没有学过。由于篇幅所限,这里仅对前三个问题加以介绍。如果学生基础好,可以越过这一部分内容不看。 一、基本输入和输出 对于重要的数据结构算法,均要求进行上机实验。而上机实践中离不开数据的输入/输出。看起来简单的输入/输出,往往是上机实验最容易出错的地方,尤其是输入。对于一个算法程序,如果数据不能正确输入,算法设计得再好也无法正常运行。 1.输入 C语言的输入是由系统提供的scanf()等函数实现,在程序的首部一般要求写入: # include 因为标准输入/输出函数都存在于头文件stdio.h 之中,现将其包含进来方可使用这些常用的输入/输出函数。有的系统允许不使用上述包含语句,可以直接使用标准输入/输出函数。 函数scanf()的功能很丰富,输入格式也是多种多样,这是大家较为熟悉的知识,这里不做详细介绍。在使用中需要注意以下几个问题。 (1)一条scanf()语句有多个变量、并且都是数值型(int, float, double)时,在输入数据时应该在一行之内键入多个数据,数据之间空格分隔。例如: int n; float x; scanf (“%d %f ” , &n, &x); 正确的输入应是:整数空格实数回车。例如: 就是在两个数据之间使用空格键为分隔符,最后打回车键。 如果语句中在%d 和%f 之间有一个逗号: scanf (“%d ,%f ” , &n, &x); 正确的输入应是:整数逗号实数回车。例如: 100,3.14 (2)在需要字符型变量或字符串输入时,要单独写一条输入语句,这样不易出错。如果在同一条scanf()语句中将字符型和数值型混合输入常常会出错。因为键盘输入时在数值型数据之间‘空格键’起‘分隔符’作用,但是在字符或字符串之间,‘空格’会被当做一个字符,而不能起到‘分隔符’的作用。所以将它们混在一起容易出错。 (3)在scanf()语句中变量写法应该是该变量的地址,这一点常被忽视。 请看下列程序: 1: viod main() 2: { char name[10], ch ; 3: int num; float x; 4: printf(“\n 请输入姓名:”); scanf(“%s”, name); 5: printf(“\n 请输入性别:”); scanf(“%c”, &ch); 6: printf(“\n 请输入学号和成绩:”); scanf(“%d%f”, &n, &x);

相关主题
文本预览
相关文档 最新文档