数据类型说明 整形

1 整型常量(^符号代表指数)

1.1 十进制整数

如:

100, -11,0。

1.2 八进制整数

以0(数字)开头的数。

如:

0123表示八进制数123

转成十进制数方式 1*8^2 + 2*8^1 + 3 * 8^0 = 83

-011表示八进制数-11

按同样的方式转成十进制为-9

1.3 十六进制整数

以0x开头的数是十六进制数

如:

0x123表示十六进制数123

转成十进制数的方式为 1*16^2 + 2*16^1 + 2*16^0 = 291

-0x12代表十六进制数-12

按同样的方式转成十进制数为-18

2 整型变量

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

整型数据在内存中是以二进制形式存放的如果定义了一个整型变量i

int i;

i = 10;

十进制数10的二进制形式为1010,以下按整型占两个字节表示

0000 0000 0000 1010

但是实际上,数值是以补码的形式表示的,一个正数的补码和其原码的形式相同

负数的补码,求负数的补码方法是,将该数的绝对值的二进制形式,按位取反再加1

如,-10

-10 的绝对值是10

得到10的二进制形式

0000 0000 0000 1010

把得到的二进制形式按位取反得到

1111 1111 1111 0101

再把得到的二进制再加1得到

1111 1111 1111 0110

因为int定义时是有符号的,所以最左边的一位是符号位

如果这个符号位是0代表这个数是正数,如果符号位为1代表这个数是负数

2.2 整型变量的分类

2.2.1 基本整型(占2个字节)

有符号基本类型 int 数据范围 -2^15 ~ 2^15 - 1

无符号基本类型 unsigned int 数据范围 0 ~ 2^16 - 1

2.2.2 短整型

有符号短整型 short 数据范围 -2^15 ~ 2^15 - 1

无符号短整型 unsigned short 数据范围 0 ~ 2^16 - 1

2.2.3 长整型

有符号长整型 long 数据范围 -2^31 ~ 2^32 - 1

无符号长整型 unsigned long 数据范围 0 ~ 2^32 - 1

根据编译器不同可能有些不同

2.3 整型变量的定义

C规定在程序中所用到的变量都必须在程序中定义即强制类型定义

对变量的定义一般放在一个函数的开关的声明部分(也可以放在函数中某一部分程序内,但作用域只限它所在的分程序)

2.4 整型数据的溢出

以下的整型占2个字符,现在用到的编译器(比如我用vs2005)是占四个字节

先看下程序

#include <stdio.h>

void main()

{

  int a, b;

  a = 32767;

  b = a + 1;

  printf("%d, %d", a, b);
}

得到的运行结果为 32767 -32768

说明,先看两个变量的二进制

a  0111 1111 1111 1111

b = a + 1 所以得到的二进制为

b  1000 0000 0000 0000

得到的这个二进制是-32768的补码,现在转下

得到绝对值 32768 的二进制

1000 0000 0000 0000

再按位取反得到

0111 1111 1111 1111

再加1得到

1000 0000 0000 0000

这就得到与b二进制一样的结果

所以在定义数据要看好再定义

原文地址:https://www.cnblogs.com/qkhhxkj/p/2089074.html