为什么选择二级制?
(1)计算机是由仅具有“开”“关”两个状态的逻辑电路组成的。
(2)二进制计算模式比较简单
(3)二进制电路具有较强的抗干扰性
(4)二进制便于布尔代数的计算(!,&&,||)
二进制(B)和十六进制(H)转换:
来源:湖大CS课程组(侵删)
简单说来,就是每一位上的数字单独转换就ok了。
位向量的运算
运算符:&:与 |:或 ^:异或 ~:非
理解:每一位单独进行运算:
来源:湖大CS课程组(侵删)
C语言中的位运算操作符适用于所有“整形”数据:
以char型为例:
来源:湖大CS课程组(侵删)
(注意转换为二进制再做位运算,举个例子:~0x41 - 0100 0001做非运算)
逻辑运算
(注意与位运算的区分)
运算符:!&& ||
(返回值非1即0,就是说不用管多大,只要不是0就当作1来看)
举例:
来源:湖大CS课程组(侵删)
移位运算 — "<<"左移 ">>"右移
逻辑左移:左侧多余位舍弃。
逻辑右移:左侧用0补齐。
eg.
算术左移:最高位保持不变,低位依次左移。
算术右移:左侧用最高位补齐。
eg.
逻辑位移适用于无符号数,算术位移适用于有符号数(最高位是符号位)。
简单说来
左移x位是乘2^x(若无溢出),右移是除以2^x(但会有误差)
关于为什么算术右移是补符号位的问题:
以十进制的-18为例,其补码为1110 1110,算术右移1位为1111 0111(数据以补码形式保存在机器中),转为原码是1000 1001为-9,刚好是除以2。
所以,补上符号位实现了除以2的操作。
内存组织
一个内存地址存放的是一个字节(8bit)
因此连续存放的两个字之间相隔4(32位)/8(64位)个地址。
字节存放顺序
来源:湖大CS课程组(侵删)
字符串表示
对于字符串,必须以空字符结尾。
对于char str[6]="12345"这一字符串,每一个字符都由ascii码表示。
(注:大端或小端存储不会影响字符串存储排列)