C语言整型数据(整数)

  整型数据即整数。

  整型数据的分类

  整型数据的一般分类如下:

  • 基本型:类型说明符为int,在内存中占2个字节。
  • 短整型:类型说明符为short int或short。所占字节和取值范围均与基本型相同。
  • 长整型:类型说明符为long int或long,在内存中占4个字节。
  • 无符号型:类型说明符为unsigned。

   无符号型又可与上述三种类型匹配而构成:

  • 无符号基本型:类型说明符为unsigned int或unsigned。
  • 无符号短整型:类型说明符为unsigned short。
  • 无符号长整型:类型说明符为unsigned long。

  下表列出了C语言中各类整型数据所分配的内存字节数及数的表示范围。


类型说明符


数的范围


字节数


int


-32768~32767,即 -215~(215-1)


2


unsigned int


0~65535,即 0~(216-1)


2


short int


-32768~32767,即 -215~(215-1)


2


unsigned short int


0~65535,即 0~(216-1)


2


long int


-2147483648~2147483647,即 -231~(231-1)


4


unsigned long


0~4294967295,即0~(232-1)


4

  整型数据在内存中的存放形式

  如果定义了一个整型变量i:

  int i;

  i=10;

  数值是以补码表示的:

  • 正数的补码和原码相同;
  • 负数的补码:将该数的绝对值的二进制形式按位取反再加1。

  例如:求-10的补码:

  由此可知,左面的第一位是表示符号的。

  各种无符号整型数据所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。

  以13为例:

  整型数据的表示方法

  上面讲到的整数,都是十进制。在C语言中,常用的还有八进制和十六进制。下面集中讲解一下:

  1) 十进制数

  十进制数没有前缀。其数码为0~9。

  以下是合法的十进制数:237、-568、65535、1627;

  以下是不合法的十进制数:023 (不能有前导0)、23D (含有非十进制数码)。

  在程序中是根据前缀来区分各种进制数的。因此在书写时不要把前缀弄错造成结果不正确。

  2) 八进制数

  八进制数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7。八进制数通常是无符号数。

  以下是合法的八进制数:015(十进制为13)、0101(十进制为65)、0177777(十进制为65535);

   以下是不合法的八进制数:256(无前缀0)、03A2(包含了非八进制数码)、-0127(出现了负号)。

  3) 十六进制数

  十六进制数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。

  以下是合法的十六进制数:0X2A(十进制为42)、0XA0 (十进制为160)、0XFFFF (十进制为65535);

  以下是不合法的十六进制数:5A (无前缀0X)、0X3H (含有非十六进制数码)。

  4) 整数的后缀

  可以用后缀“L”或“l”来表示长整型数。例如:

  • 十进制长整型数:158L (十进制为158)、358000L (十进制为358000);
  • 八进制长整型数:012L (十进制为10)、077L (十进制为63)、0200000L (十进制为65536);
  • 十六进制长整型数:0X15L (十进制为21)、0XA5L (十进制为165)、0X10000L (十进制为65536)。

  长整型数158L和基本整型数158 在数值上并无区别。但对158L,因为是长整型数,C编译系统将为它分配4个字节存储空间。而对158,因为是基本整型,只分配2 个字节的存储空间。因此在运算和输出格式上要予以注意,避免出错。

  无符号数也可用后缀表示,整型数的无符号数的后缀为“U”或“u”。例如:358u、0x38Au、235Lu均为无符号数。

  前缀,后缀可同时使用以表示各种类型的数。如0XA5Lu表示十六进制无符号长整型数A5,其十进制为165

  几个整型变量的定义:

1 int a,b,c;  // a,b,c为整型变量
2 long x,y;  // x,y为长整型变量
3 unsigned p,q;  // p,q为无符号整型变量

整型变量的定义与使用。

#include <stdio.h>
int main(){
    int a,b,c,d;
    unsigned u;
    a=12;b=-24;u=10;
    c=a+u;d=b+u;
    printf("a+u=%d,b+u=%d\n",c,d);
    return 0;
}

整型数据的溢出

1 #include <stdio.h>
2 int main(){
3     int a,b;
4     a=32767;
5     b=a+1;
6     printf("%d,%d\n",a,b);
7     return 0;
8 }

  注意:以上结果是在TC2.0下得出的;在VC6.0下,输出值是 32767, 32768。因为 int 类型在 TC2.0下默认是short int,占2个字节,在VC6.0下默认是 long int,占4个字节,32768不会导致溢出。将 a = 32767 改成 a = 2147483647 后即可看到溢出

  不同类型变量赋值

 1 #include <stdio.h>
 2 int main(){
 3     long x,y;
 4     int a,b,c,d;
 5     x=5;
 6     y=6;
 7     a=7;
 8     b=8;
 9     c=x+a;
10     d=y+b;
11     printf("c=x+a=%d,d=y+b=%d\n",c,d);
12     return 0;
13 }

  从程序中可以看到:x、y是长整型变量,a、b是基本整型变量。它们之间允许进行运算,运算结果为长整型。但c、d被定义为基本整型,因此最后结果为基本整型。

C语言整型数据(整数),布布扣,bubuko.com

时间: 2024-10-03 21:41:30

C语言整型数据(整数)的相关文章

Java 判断是否为汉字 判断是否为乱码 判断字符串是否为双整型数字 整数 数字

/**  * 判断是否为汉字  *   * @param str  * @return  */ public static boolean isGBK(String str) {  char[] chars = str.toCharArray();  boolean isGBK = false;  for (int i = 0; i < chars.length; i++) {   byte[] bytes = ("" + chars[i]).getBytes();   if (

使用指针比较整型数据的大小

该C实例是一个比较简单的实例,但是在该实例中,重点介绍了C语言中比较常用的也是容易出错的指针变量,其中包括指针变量的赋值,指针变量的运算等等.该实例实现了通过使用指针变量来比较3个整形数据,使其从小到大排列,实现比较简单,下面附上我的代码: #include <stdio.h> /** * 通过指针比较三个整数的大小 * @brief main * @return */ /** * 指针,即为变量的地址:指针变量,即数值为 * 指向变量地址的变量 * 指针变量的类型: * 对指针变量的类型说明

C语言字符型数据(字符)

字符型数据的表示 字符型数据就是字符. 字符型数据是用单引号括起来的一个字符.例如: 'a'.'b'.'='.'+'.'?' 都是合法字符型数据. 在C语言中,字符型数据有以下特点: 字符型数据只能用单引号括起来,不能用双引号或其它括号. 字符型数据只能是单个字符,不能是字符串. 字符可以是字符集中任意字符.但数字被定义为字符型之后就不能参与数值运算.如'5'和5 是不同的.'5'是字符型数据,不能参与运算. 转义字符 转义字符是一种特殊的字符.转义字符以反斜线"\"开头,后跟一个或几

C语言实型数据(浮点数)

实数的表示 1) 十进制数形式 由数码0~ 9和小数点组成. 例如:0.0.25.0.5.789.0.13.5.0.300..-267.8230 等均为合法的实数. 注意,必须有小数点. 2) 指数形式 由十进制数,加阶码标志“e”或“E”以及阶码(只能为整数,可以带符号)组成.其一般形式为: a E n(a为十进制数,n为十进制整数) 其值为 a*10n.如: 2.1E5 (等于2.1*105) 3.7E-2 (等于3.7*10-2) 0.5E7 (等于0.5*107) -2.8E-2 (等于

C语言---整型字符串转换

C语言提供了几个标准库函数,能够将随意类型(整型.长整型.浮点型等)的数字转换为字符串.下面是用itoa()函数将整数转 换为字符串的一个样例: # include <stdio.h>    # include <stdlib.h> void main (void)    {    int num = 100;    char str[25];    itoa(num, str, 10);    printf("The number ’num’ is %d and the

华为机试—整型数组中出现次数最多的元素

取出整型数组中出现次数最多的元素,并按照升序排列返回. 要求实现方法: public static int[] calcTimes(int[] num, int len); [输入] num:整型数组: len :输入的整数个数 [返回] 按照升序排列返回整型数组中出现次数最多的元素 [注意]只需要完成该函数功能算法,中间不需要有任何IO的输入输出 示例 输入:num = {1,1,3,4,4,4,9,9,9,10} len = 10 返回:{4,9} #include <iostream>

java整型数与网络字节序的 byte[] 数组转换关系

java整型数与网络字节序的 byte[] 数组转换关系 工作项目需要在java和c/c++之间进行socket通信,socket通信是以字节流或者字节包进行的,socket发送方须将数据转换为字节流或者字节包,而接收方则将字节流和字节包再转换回相应的数据类型.如果发送方和接收方都是同种语言,则一般只涉及到字节序的调整.而对于java和c/c++的通信,则情况就要复杂一些,主要是因为java中没有unsigned类型,并且java和c在某些数据类型上的长度不一致. 本文就是针对这种情况,整理了j

使用头文件climits中的符号常量获知整型数据的表数范围---gyy整理

在头文件climits(limits.h)以宏定义的方式定义了各种符号常量来表示各种整型类型表示数的范围,如int的最大最小值,long的最大最小值等. 符号常量 表示 CHAR_BIT char 的位数 CHAR_MAX char 的最大值 CHAR_MIN char 的最小值 SCHAR_MAX signed char 的最大值 SCHAR_MIN signed char 的最小值 UCHAR_MAX unsigned char 的最大值 SHRT_MAX short 的最大值 SHRT_M

求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。函数为 int same(int num)其中num是输入的整型数字

import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Test { public static void main(String[] args) { /** * 2.求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123, * 相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0. * 方法是先将整型数字转换到数组中,再判断.