今天的主题是字节,位,和整数
每个位是0或1
由于位易于储存,且在干扰强烈的电线中能稳定传输,所以计算机使用二进制
编码字节值
一个字节是8个位
数据表示实例
字节序
组成字的多个字节在内存中是如何储存的呢?
传统:
1.大端
低位字节具有最高地址
2.小段
地位字节具有最低地址
我认为就是大端就是原版照抄(由原本的字节顺序储存)
小端就是把字节顺序倒过来储存(菜鸡勿喷)
位的操作
将0视为错误(False)
其他除了0以外的数皆为"ture";
在位操作中总是返回0或1
例子:
x<<y
将x向左移动y位,将移动过的位全部舍掉,空出来的位填充0.
x>>y
将x向右移动y位,将移动屏蔽的位舍掉,空出来的位有两种情况。
如果是逻辑移位,填充0
如果是算数移位,填充字符与符号位一致。
逻辑移位与算术移位的区别请看:https://blog.csdn.net/MyySophia/article/details/51714563
整数
有符号和无符号
1,原码表示法
补码表示法
定义:正数的补码就是它本身,负数的补码就是原负数加上模。
定点小数的模式2,定点整数的模是2^n+1
所以有
补码最大的优点就是将减法运算转化位加法运算
简便的方法:负数符号位为1,数值部分“各位取反,末尾加1”
反码的表示方法
反码与补码的区别仅仅就在于末尾是否加1,所以由补码的定义可以推出反码的定义
无符号数字的范围
最小:0
最大:(2^n)-1;
有符号数字的范围
最小:-2^n-1;
最大:(2^n-1)-1;
可以看出在取值宽度上无符号数与有符号数是一致的,只是起点不同
有符号与无符号的转化*(在开始的正数时是一致的,但到了有符号的负数阶段,有符号的负数-1对应无符号的最大值,有符号负数的最小值对应的是无符号对应有符号的最大值加1)*
依照上面图片就有以下匪夷所思的结论:(其中U是无符号的意思)
数据类型的转化
拓展
使n拓展k位,就是向右添加k个n的符号位
举例:
截断
这个比较粗暴,将X截断到w位(转化为w位),直接保留X的w位,剩下的直接舍去。
举例:
转载:https://blog.csdn.net/qq_43511964/article/details/102467527