整数主要分为 unsigned int 和 signed int
但是 char类型较为特殊 char类型分为 char类型本身和unsigned char类型和signed char,char的类型主要取决于编译器,有的编译器把char当做unsigned char,有的编译器则将其当做signed int类型。
大端存储:将数据的低位存放到内存的高地址处,将数据的高位存放到内存的低地址处。
小端存储:将数据的低位存放到内存的低地址处,将数据的高位存放到内存的高地址处。
#include<stdio.h>
int main()
{ char a = -1;
signed char b = -1;
unsigned char c = -1;
printf("%d%d%d",a,b,c)
return 0;
}
输出结果:-1,-1,255
#include <stdio.h>
int main()
{
char a = -128;分析:在内存中-128,存储为
printf("%u\n",a);10000000 因为char 在vs2008中是signed char 故变成
return 0; 11111111 1111111111111111 10000000
}
输出结果:4294967168
#include<stdio.h>
int main()
{ char a = 128;11111111 11111111 11111111 10000000
printf("%u\n",a);
return 0;
} 输出结果:4294967168 整型提升提升char ,%u则是以%u的角度来看问题
#include <stdio.h>
int main()
{ int i = -20;-20 原码:10000000 00000000 00000000 00010100 10:00000000 00000000 00000000 00001010
unsigned int j = 10;反码:11111111 11111111 11111111 11101011 二者相加:11111111 11111111 11111111 11110110
printf ("%d\n",i+j);补码:11111111 11111111 11111111 11101100 减一:11111111 11111111 11111111 11110101
return 0; 取反:10000000 00000000 00000000 00001010
} 结果是-10:
#include <stdio.h>
int main()
{ int unsined i; 此题基本是无限循环,因为到了-1,-1其实你是 用size-t 的角度来看的话
for (i=9; i>=0; i--) 他其实是一个特别大的数字 ,基本还是无限循环。
{
printf("%u\n",i);
}
return 0;
}
#include<stdio.h>
int main()
{
short num = 32767; 这个其实跟 signed int 是128 那个基本相同
short int a = num +1; 还是加一 整型提升成一个 十分大的数字
printf("%d",a);
}
#include <stdio.h>
int main()
{
unsigned char i = 0;
for (i = 0; i<=255; i++)
{ 11111111
puts("hehe\n"); + 00000001
} 100000000
return 0;
} 255+1 其实在char中先加一 进一位 后面全是零 但是因为是char 故又只要后面 8位 所以 i又变成0了 无限死循环
浮点数在内存中的存取:
在IEEE 754 中 规定:对于32位的浮点数,最高位的1位是符号位S,接着的8位是指数E,剩下的23位是有效数字M。
对于64位的浮点数,最高位的1位是符号位S,接着的11位是指数E,剩下的52位是有效数字M。
#include <stdio.h>
int main()
{
int num = 9;
float *pfloat = (float *)#
printf("num=%d\n",num);
printf("*pfloat = %f\n",*pfloat);
*pfloat = 9.0;
printf("num =%d\n", num);
printf("*pFloat= %f\n",*pfloat);
return 0;
} 出现这种结果 就是因为浮点数跟整数在内存中的存储方式不同
第一个 num的结果是9,这当然毋庸置疑,其次*pfloat 的值: 9 在内存中表示 00000000 00000000 00000000 00001001
如果用float的角度来看 第一位符号位 中间8位 是E 直接 E全零 就认为是0了 后面都不管
第四个是9.0 毋庸置疑 第三个:是用浮点数的角度创建的9.0 但是解析的时候是用 int 解析的 自然有问题
9.0 浮点数 符号位是0 ,然后二进制 是1001.0 1.001*2^3 s=0; M= 1.001; E=3;
e= 127+3= 130; 10000010
0 10000010 001 00000000000000000000 然后按照int的角度来看就是一个 很大的正数