斯坦福编程笔记,day10.28.18

#斯坦福公开课笔记,day10.28.18

1 C语言中数据类型在内存的存储方式
bool 1byte
char 1byte
short 2byte
int 4byte
long 4byte
double 8byte
2 补码的基本原理:最高位代表符号位,为了实现加法运算的简便性,相反数相加为0的操作
0x00001111
+0x10001111
0x1001110 = -7 不是期望的0;
补码,(1)所有位取反:0x11110000
(2) +1 得到补码:0x11110001
(3)此时补码与原有二进制数相加恰好为0,正确表示了相反数的含义。对应的0x11110001,表示-7,其中最高位代表符号位。
3 位模式复制
长字节类型数据赋值给低字节数据类型;
short s = 67;
char ch = s; 在内存中将short的低八位进行位复制到char型;

带符号的数据进行扩展赋值时候:
short s = -1;
int i =s; 此时高位的int型会进行符号位拷贝,填满高位的两个byte;
4 浮点数的存储协议
对于一个float型的数据
高位--------------->低位
符号位占1位,exp:占8位,.xxxxxx: 剩下23位表示2的负次幂
而实际表示存储的数据为(-1)^ (s) * 1.xxxxxxxxxxx 2^(exp-127),exp是一个8位unsigned的整数,0-255
5 int i =37;
float f =
(float *) &i;
& 取地址,
(float *) 表示这块内存地址存储格式是float型的;

  • :解引用;
    实际这个过程只到解引用之后内存里的数会按照float型的协议转化
    6 结构体:
    struct fraction {
    int num;
    int deno;};
    pi.num = 22;
    pi.deno = 7;
    如下操作:
    ((fraction*)&(pi.deno) )->num = 12 ;
    注意该过程中的原 pi.deno 存储内容发生了变化;
    7:数组名编译后就是这块内存区域的首地址,
    在C语言中,不会进行越界检查,导致出现问题:
    int array [10];
    array[10] =1;这些内存区域可能不存在,若存在会将该内存位模式的解析转化为int型,形成意想不到的结果;
    array[-4] =77; 这些内存区域可能不存在,同上。
    8 大小端
    大端:低地址高权重,高地址低权重;
    小端:低地址低权重,高地址高权重;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值