首先我们应该知道:
int在win32内存中占四个字节,以%d输出时有符号数则要去除一个符号位,可以表示的数据范围是-2^31~(2^31)-1.
在16位中,用高位置1来表示负数,int型占两个字节共16位,32768的二进制是10000000,00000000,高位为1,系统会认为是 负数,所以32768需要用长型表示,占四个字节。最高位就不是1了。
unsigned int 也占四个字节在32位系统中,占四个字节能表示的数据是0~(2^31)-1
char在win32中占1个字节,能表示的数据范围是-128~127
unsigned char在win32中占1个字节,能表示的数据范围是0~255
#include<stdio.h>
#include<stdlib.h>
int main()
{
char a = 0x80;
unsigned int b = 0x80;
unsigned int c = a;
int d = a;
printf("%d\n", sizeof(unsigned int));//unsigned int 占四个字节
printf("a=%d,a=%u\n", a, a);
printf("b=%d,b=%u\n", b, b);
printf("c=%d,c=%u\n", c, c);//char 0x80 占一个字节,一个字节有符号输出时是-128-127,无符号是0-256
//所以有符号时是-128而不是128。
printf("d=%d,d=%u\n", d, d);
//00000000 00000000 00000000 00000010 2
//11111111 11111111 11111111 11111101
//11111111 11111111 11111111 11111110 -2
//00000000 00000000 00000000 10000000 0x80
//11111111 11111111 11111111 01111111
//11111111 11111111 11111111 10000000 0x-80
system("pause");
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<string>
int main()
{
#if 0
int i=0;
char str[1000];
for (i = 0; i < 1000; i++)
{
str[i] = -1 - i;//str[255]
//含义是当i=?的时候使得str[i]=0;str[i]是char只能存储一个字节那么1 0000 0000,就是0
//1 0000 0000的十进制数是256,所以strlen是255.
}
printf("%d\n", strlen(str));
//从第一个字符开始到‘\0’结束\0对应的ASCII码值是0(本身是字符数组),找到0就是找到了\0
//-1-255=-256
//265 1 0000 0000
//-256 1 0000 0000
#endif
int a = 0x11223344;
short int b = a;
char c = a;
printf("%x,%x,%x\n", a, b, c);
printf("%d\n", sizeof(short int));//short int两个字节
system("pause");
return 0;
}