数据类型说明 整形
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二进制一样的结果
所以在定义数据要看好再定义