整数在计算机中以二进制数表示。
整数表示的范围在头文件limits.h中定义。
1. 无符号整数的表示方法unsigned int a = 25;
00000000000000000000000000011001 1×2^4+1×2^3+0×2^2+0×2^1+1×2^0=25
高位<------------------------------------->低位
n位可以表示的无符号整数有0~2^n-1
| 无符号整数类型 | 最小值 | 最大值 |
|---|---|---|
| unsigned char | 0 | 255 |
| unsigned short | 0 | 65535 |
| unsigned int | 0 | 4294967295 |
有符号整数有3种二进制表示方法,即原码、反码和补码。最高位为符号位,0表示正数,1表示负数,其余为数值位。在计算机中整数以补码的形式存储。
原码:直接将数值按照正负数的形式翻译成二进制。
正数的反码、补码与原码相同。负数的反码、补码要经过如下计算。
反码:将原码的符号位不变,其他位依次按位取反。补码:反码+1就得到补码。
int a = -25;
原码:10000000000000000000000000011001
反码:11111111111111111111111111100110
补码:11111111111111111111111111100111
8位有符号整数的取值范围如下图所示:(补码10000000不表示-0,表示-128)
| 有符号整数类型 | 最小值 | 最大值 |
|---|---|---|
| signed char | -128 | 127 |
| signed short | -32768 | 32767 |
| signed int | -2147483648 | 2147483647 |
大端(存储)模式是指,数据的低位保存在内存的高地址中,数据的高位保存在内存的低地址中。
小端(存储)模式是指,数据的低位保存在内存的低地址中,数据的高位保存在内存的高地址中。
如0x12345678,
大端模式:12 34 56 78
低地址<--->高地址
小端模式:78 56 34 12
高地址<--->低地址
判断当前计算机是大端模式还是小端模式:
#includeint check_sys() { int a = 1; return *(char*)&a; } int main() { int ret = check_sys(); if (ret == 1) printf("小端n"); else printf("大端n"); return 0; }
1(int型)的补码用十六进制表示为0x00000001,
大端模式:00 00 00 01
低地址<--->高地址
小端模式:01 00 00 00
高地址<--->低地址
*(char*)&a表示取出a的地址,然后强制类型转换为char*,解引用,此时只能访问一个字节的内容。如果这一个字节的内容为0,为大端模式;如果这一个字节的内容为1,为小端模式。



