字节的存储与计算
int main()
{
unsigned char a = 200;
unsigned char b = 100;
unsigned char c = 0;
c = a + b;
printf("%d %d",a + b,c);
return 0;
}
char a =200;
200/ 2 8 256 0
200 7 128 1
72 6 64 1
8 5 32 0
8 4 16 0
8 3 8 1
2 4 0
2^1 2 0
2^0 1 0
000100110
11001000
100 64 1 6
36 32 1 5
4 4 1 2
0110 0100
0000 0000
c = 1100 1000 + 0110 0100
c = 1 0010 1100
2^8+2^5+2^3+2^2 =
256 + 44 = 300
数据在内存中的存储
#include <stdio.h>
int main()
{
int a = 1;
int b = -2;
return 0;
}
反码:原码除符号位,按位取反。补码等于反码加一。
原码:0001
反码:1110
补码:1111
1000 0000 0000 0010
1111 1111 1111 1101
1111 1111 1111 1110
二进制转十六进制
1111 1111 1111 1111 1111 1111 1111 1110
ff ff ff fc
大端和小端字节序
地址从上至下生长
小端字节序,数据的地位保存在内存的地址中
unsigned int a = 0x1234;
unsigned char b = *(unsigned char*)&a;
在32位大端模式处理器上变量b等于
大端序中,低地址到高地址的四字节十六进制排列为00 00 12 34,其中第一个字节的内容为00
int main()
{
char a[1000] = {0};
int i = 0;
for(i = 0; i < 1000;i++)
{
a[i] = -1 -i;(i+1在首部置1)
}
printf("%d",strlen(a));
return 0;
}
10 00 00 01
1024
512 2^9
2^10-24
24 2^4+2^3
1 0000
1000
24
0001 1000
0100 0000 0000
0000 0001 1000
0011 1110 1000
1000 0011 1110 1000
a是字符型数组,strlen找的是第一次出现尾零的位置。
整形来说,数据存放内存中存放的是补码。但是对于浮点型来说,在内存中存放的是否也是补码呢
浮点型在内存中的存储
float double long double类型
例子:
int main()
{
int n = 9;
float *pfloat = (float*)&n;
}
字符函数:
strlen()、strcpy()、strcat()、strcmp()、strsrt()、memcpy、memmove、
自实现:
自定义类型:结构体,枚举,联合