数据宽度
计算机中数据有长度限制,超过最高宽度的数据会被丢弃。
1.位(bit):一个0或1
2.字节(byte):8位
3.字(word):16位
4.双字(doubleword):32位
存储范围
1.字节:0~0xFF
2.字:0~0xFFFF
3.双字:0~0xFFFFFFFF
有符号数和无符号数
无符号数的编码规则
无符号数没有负数,全为正数,这个数是多少就存多少
例:1001 1010=0x9A
有符号数的编码规则
若有符号数最高位是0时为正数,最高位是1时为负数。
1.原码:最高位为符号位,其余各位为数值本身的绝对值
2.反码:正数:反码与原码相同。负数:符号位为1,其余位对原码取反
3.补码:正数:补码与原码相同。负数:符号位为1,其余位对原码取反加1
总结:正数原码存储,负数补码存储。
这个圆,从下面的点开始,逆时针数右半圆为从0到127,顺时针数左半圆为-1到-128
对于一个字节
无符号数:0~FF
有符号数:正数:07F,负数:FF80(因为正数最高位必为0,负数最高位必为1)
计算机运算
位运算
与运算(and &):两个位都为1时,结果才为1
或运算(or |):只要有一个为1就是1
异或运算(xor ^):不一样的时候是1
非运算(not ~):0就是1,1就是0
左移(shl <<):各二进制位全部左移若干位,高位丢弃,低位补0
右移:各二进制位全部右移若干位,低位丢弃,高位补0或者补符号位
汇编:shr--高位补0,sar--高位补符号位
C语言:都是>>,通过数据类型判断,无符号数补0,有符号数补符号位
四则运算
加法
1.异或运算(无进位时结果与按位加一样)
2.与运算(判断是否有进位,因为只有两个1才会进位)
3.异或运算(1,2的结果左移1位,左移是因为2判断了哪里需要进位)
4.与运算(再次判断是否有进位)
5.如此重复直到与运算结果为0
减法
减法就是加法,例如4-5=4+(-5)
乘法
乘法本质就是循环的加法
除法
除法的本质是减法,就是看一个数能减去一个数多少次