Bits Bytes and Integers

Bits,Bytes and Integers

基础位运算

分清&,&&,| ,||,~,!之间的区别

位操作: &,|,~,运算时只是单纯进行位操作

逻辑比较: &&,||,!,运算时会添加逻辑考虑,

比如||前面的为True,则提前中止调用

又比如,对一个非0的数进行!两次会获得一个1,这和位操作有很大的区别

算术右移和逻辑右移

逻辑右移: 将整个数字向右移动,同时高位补0

算术右移: 将整个数字向右移动,同时高位按照符号位补充

左移的特殊情况

如果一个八位的数字进行左移八位的操作,在部分计算机中,这个8将被模8,因此并不能得到想象中的0

补码 T

国内讲法: 除了符号位,全部按位取反再加1

这课的讲法:最高位视为负权,如[-16,8,4,2,1]

经典图片

1663413629124

扩展

例如:8位->16位

基本规则:将符号位复制k份,k为扩展位数

解释,想象负数的情况,假设最高位权重暂时是-8,增加一位最高位,新增一位-16,但之前的最高位变为+8,刚好抵消。

加减乘除

无符号数直接不谈

补码加法: 可以通过补码加法简单得到减法,只要加上负的值就行

正/负溢出

正溢出:俩正数加起来等于一个负数

乘法

如果乘2的倍数,只需要【算术】移位就行了,不管是不是补码表示

除法

同样是算术移位,但这回如果是负数,它就不是四舍五入,而是向负无穷舍入,例如 -3/2=-2。而不是-1

获得相反数

按位取反再+1

一个恐怖的案例

1663426748805

这里,i会被隐式转换成unsigned int(因为sizeof是 unsigned int),于是这个for循环不会结束

无符号数的优点

由于无符号数的计算采用取模的方式

在一些模运算时(比如大多数加密算法)

当位表示集合而非数字时,用无符号数最好。

字存储

最低有效字节在小端序电脑中放在首位,在大端机器中放在末位

Author

YSH

Posted on

2022-09-17

Updated on

2022-10-12

Licensed under