数据类型运算符 补码
数据类型:
long 32位4个字节 64位8个字节
vs2013 4个字节
long long 8个字节
float 4个字节
double 8个字节
%x和%p的区别:
int main()
{
int num = 256;printf("%p\n",&num); //0107FAFCprintf("%#p\n", &num); //0X0107FAFCprintf("%x\n", &num); //107fafcprintf("%#x\n", &num); //0x107fafc
}
补码:
正数 原码 反码 补码 一样
负数
负数的原码 符号位是1 其他位正常
负数的原码转补码 除符号位取反 再加1 // 1000 0011 --> 11111101
负数的补码转原码 除符号位取反 再加1
-5 原码1000 0101
补码1111 1011
原码1000 0101
截断:
#include <stdio.h>
int main()
{
int num = 5555; //十六进制0x15b3
小端存储 b3 15 -----内存unsigned char c
= num; // b3 只留下低字节printf("%d\n", c); //输出179
}
unsigned 类型 与 int 相加出现的bug :
unsigned int a = 6;
a+ -10 > 0 //这句话是对的 因为-10是int 转为unsigned int 负数就会变成一个非常大的正数
//相加绝对大于0
#include <stdio.h>
int main()
{
unsigned int a = 6;
if (a - 10 > 0) //结果会当成一个无符号整形来看待
{
printf("aaaaaaaaa\n");
}
}
结果会输出aaaaaaaaa
3.14 :
3.14 默认是double型
要想变成float型 就要使用 3.14f
,(逗号)运算符 :
结果是最后一个值 int max = 5,6,10; => max=10;
%求余运算符 :
负数可以求余,结果和被除数符号一致
但是浮点数不能求余