首页 > 其他分享 >c语言学习记录2

c语言学习记录2

时间:2022-10-16 23:00:58浏览次数:92  
标签:0000 语言 16 补码 记录 0101 学习 反码 原码

二进制     

二进制 (基数为 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

相关文章