一、基础学习(数据类型)
1.bool
输出false,0
2.
2.1
1字节代表8位2进制,所以unsigned char 0000 0000 --- 1111 1111对应的是0 --- 256-1=255
有符号位signed char 第一位代表符号位 1111 1111 --- 0111 1111对应-128 --- 127
2.2.原码反码补码
计算机在内存中的存储方式是补码
2.2.1 计算
特别的-128的补码为1000 0001
2.2.2 补码是为了计算机中计算负数方便所设值
2.3
char
#include <stdio.h>
int main()
{
char a = 3;
char b = 127;
char c = a + b;
printf("%d\n",c);
return 0;
}
//按照正常的加减运算,结算结果应该是130,但实际上是-126
//原因是发生了整型的提升与截断
//数字3的补码为:0000 0000 0000 0000 0000 0000 0000 0011
//将数字3交给a时,因为char类型只占1个字节即8bit,所以需要进行截断,只保留最后的8个bit
//所以此时a中储存的bit位为:0000 0011
//数字127的补码为:0000 0000 0000 0000 0000 0000 0111 1111
//同理也因为char类型发生截断,截断后b中存储的bit位为:0111 1111
//在执行a+b时,要先对8bit为的a和b进行整型提升,因为a和b都是char类型,所以是有符号位
//提升时,补最高位的数字。因为a和b最高位的数字都为0,所以在最高位补0即可,补够32位
//提升后两者的补码为
//3:0000 0000 0000 0000 0000 0000 0000 0011
//127:0000 0000 0000 0000 0000 0000 0111 1111
//3+127:0000 0000 0000 0000 0000 0000 1000 0010
//又因为c也是char类型的,只能存放8bit。也需要进行截断
//截断后c中存储的bit位为:1000 0010
//在进行打印输出的时候是%d即整型int类型打印输出
//int 类型占4个字节,32位bit
//所以要对c进行整型提升
//因为c的最高位是1,所以在最高位前面补1,补齐32位即可
//提升后的c为:1111 1111 1111 1111 1111 1111 1000 0010
//c转化为原码之后为:1000 0000 0000 0000 0000 0000 0111 1110
//c原码对应的值为-126
超出范围计算机拆分计算!!!!
2.4
sizeof 计算数据类型长度
整形常量:十进制、八进制、十六进制
打印显示%d、%o、%x;
浮点:%f
指数%e
字符%c
32位
字符常量
%s----字符串输出
地址显示错误!!!
%p表示打印地址
~ 0x17 = ~ 0001 0111 = 1110 1000=0xe8
0126=0101 0011 0xac=1001 1011
z = 0000 0100 0x04
0126=0101 0011 0xac=1010 1011
z = 1111 1011 0xfe
75 = 0100 1011
0173=0111 1011
z = 0011 0000=0x30
0xe4 = 1110 0100
b = 0010 0000=0x20