二进制
二进制 (基数为 2) 数字系统中有两个可能值,在每一位上,通常表示为 0 或 1。相反,在十进制 (基数为 10) 数字系统中,在每一位上,有 10 个可能值 (0,1,2,3,4,5,6,7,8, 或9)。
例:(111001)2 = 1⋅25+1⋅24+1⋅23+0⋅22+0⋅21+1⋅20 = (57)10
十六进制
十六进制转换有16进制每一位上可以是从小到大为 0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
16 个大小不同的数,即逢 16 进 1,其中用 A,B,C,D,E,F(字母使用大写)这六个字母来分别表示 10,11,12,13,14,15。
例:2AF5 换算成十进制:
用竖式计算:
第0位: 5 * 16^0 = 5 第1位: F * 16^1 = 240 第2位: A * 16^2= 2560 第3位: 2 * 16^3 = 8192
所以(2AF5)₁₆ = (2 × 16³) + (10 × 16²) + (15 × 16¹) + (5 × 16⁰) = (10997)₁₀
n进制数转换为十进制数,只需将每个位的值,乘以 ni次即可,其中 i 为当前位的位数,个位的位数为 0。
原码 补码 反码
原码:原码是人类能理解的二进制,如(5)10 = (0000 0101)2 ,在原码首位表示的是正负,0正1负;
反码:正数的反码与原码一致,负数的反码首位(符号位)与原码相反;
补码:正数的补码与原码一致,负数的补码是该数的反码+1;
5 -5
原码 0000 0101 1000 0101
反码 0000 0101 1111 1010
补码 0000 0101 1111 1011
为什么计算机里面是以补码的形式计算的?
假设计算5+(-5) 计算机里只有加法器
原码:0000 0101 反码: 0000 0101 补码:0000 0101
1000 0101 1111 1010 1111 1011
1000 1010 1111 1111 10000 0000--舍掉首位---0000 0000
按位计算(补码计算)
按位与&
x == 1 && y == 1 那么(x&y) == 1,否则的话(x&y)== 0;
应用1 让一个数的某一位或某些位为0,x & 0xFE(最后一位为0)
按位或 |
x==1 || y == 1,那么(x|y)=1
应用 想让某一位为1,就或上那个位为1的数 x|0x01
把两个数拼起来:0x00FF|0xFF00
按位取反~
把1变0,0变1
想得到全是1的数:~0
x|7 低三位为1 x&~7 低三位为0
左移运算<<
num<< i 表示将num的二进制表示向左移动i位所得的值(开口补0)
右移运算>>
num>>i表示将num的二进制表示向右移动i位所得的值(开口补0)
eg:
对于左移操作,需要确保移位后的结果能被原数的类型容纳,否则行为也是未定义的。对一个负数执行左移操作也未定义
对于右移操作,右侧多余的位将会被舍弃,而左侧较为复杂:对于无符号数,会在左侧补 ;而对于有符号数,则会用最高位的数(其实就是符号位,非负数为 ,负数为 )补齐
标签:0000,语言,16,补码,记录,0101,学习,反码,原码 From: https://www.cnblogs.com/spy726/p/16793927.html