IT人才知道的二进制爱情,羡慕ing

简介: 二进制的爱情也太甜了,快来看看吧,同时祝友友们也早早得拥有自己的二进制爱情吧。

美美的七夕节

2.jpg


首先祝友友们节日快乐呀!!!

缘分,就是一个奇数,等待另一个奇数,来组成一个偶数。七夕佳节,愿还是奇数的你,早日脱单;已是偶数的你,幸福甜蜜!

七夕节,又称七巧节、七姐节、女儿节、乞巧节、七娘会、七夕祭、牛公牛婆日、巧夕等,是中国民间的传统节日。七夕节由星宿崇拜衍化而来,为传统意义上的七姐诞,因拜祭“七姐”活动在七月七晩上举行,故名“七夕”。拜七姐,祈福许愿、乞求巧艺、坐看牵牛织女星、祈祷姻缘、储七夕水等,是七夕的传统习俗。经历史发展,七夕被赋予了“牛郎织女”的美丽爱情传说,使其成为了象征爱情的节日,从而被认为是中国最具浪漫色彩的传统节日,在当代更是产生了“中国情人节”的文化含义。


不过,在美美的七夕节这几天里,我想还有着不少友友在和我一样,还在老老实实搬砖吧。

4.jpg

不过,有关系嘛,

没有关系。

可是......

今天学的东西也好甜呀。

5.jpg

期待的二进制来了

      最早的编程语言是二进制语言,也是计算机能够直接识别的唯一语言。不管用什么高级语言编写的程序最后都要转换为二进制语言,才能在计算机上执行。

计算机只认识二进制哦。

image.png

二进制(binary),发现者莱布尼茨,是在数学和数字电路中以 2 为基数的记数系统,是以 2 为基数代表系统的二进位制。这一系统中,通常用两个不同的符号 0(代表零)和 1(代表一)来表示。

十进制是组成以 10 为基础的数字系统,有 0,1,2,3, 4, 5, 6, 7, 8, 9 十个基本数字组成。

十六进制(简写为 hex 或下标 16)是一种基数为 16 的计数系统,是一种逢 16 进 1 的进位制。通常用数字 0、1、2、3、4、5、6、7、8、9 和字母 A、B、C、D、E、F(a、b、c、d、e、f)表示,其中:A~F 表示 10~15,这些称作十六进制数字


大家可能会有疑惑,二进制?就是那一串 01101010......的数字嘛,可是我们在计算机中也很少见呀。

的确,一般我们在计算机中看到的采用的都是 10 进制,16 进制等


2 进制                     10 进制                             16 进制

逢二进一                  逢十进一                          逢十六进一

数字: 01                   数字: 0123456789            数字: 0123456789ABCDEF

权:  ......8 4 2 1          权: ...... 1000 100 10 1    权:  ........16 1

基数 2                      基数 10                            基数:16


看到 10 进制大家是不是就很熟悉了。再来看一下他们的对应形式

6.jpg

2 进制转换为 10 进制:将一个 2 进制数每个 1 位置的权值累加即可

例:

11010101(2)-------213(10)

128+64+16+4+1   =  213


10 进制转 2 进制:“除以 2 取余,逆序排列”(除二取余法)

8.jpg


在这里,大家还可以使用相减权的方法来进行转换。

                   128     64    32     16    8      4     2     1   (10)

                      1       1     0        0     0      1     0     0   (2)

                     68      4                              0

196(10)=  11000100(2)


2 进制转换为 16 进制:可以把二进制数每四位数分为一段,每一段用一个十六进制数来表示。

3.jpg


0101 1111(2)----64+16+8+4+2+1=95

5f(16)----------------5*16+15=95


在计算机采用 16 进制就是用于简写 2 进制(缩写 2 进制),因为 2 进制的书写过于冗长,而 2 进制的每 4 位对应一个 16 进制。


计算机中使用的都是二进制,八进制和十六进制的出现其实都不是计算机的需要,它们的出现完全是出于表达和识别的方便性考虑的。

一个较大的数用二进制表示就太长了,比如一个 int 类型的 100(4 个字节,总共 32 位),用二进制表示就是 0000 0000 0000 0000 0000 0000 0110 0100,这还是一个比较小的数,如果更大,将会更复杂,写这么长,确实有些不便,于是,就出现了更简易的八进制,十进制,十六进制,数制越大,表示一个数所需的数码位数就越少,所以 C 和 C++代码中不能直接输入二进制,但是允许输入八进制、十进制、十六进制。

那为什么没有出现什么七进制,九进制呢?因为 8,16 分别是 2 的 3 次方、4 次方。使得这 3 种进制之间转换起来很方便。

八进制、十六进制即缩短了数的表示位数,同时保持了二进制数的表达特点。

-----引用自王达老师《深入理解计算机网络》


说到这里就不得不提一下补码,取反的相关知识。。


补码

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。


补码的规律:

1. 0 是 0000 0000 0000 0000 0000 0000 0000 0000

2. -1 是 1111 1111 1111 1111 1111 1111 1111 1111

3.max 是 0111 1111 1111 1111 1111 1111 1111 1111

4.min 是 1000 0000 0000 0000 0000 0000 0000 0000

System.out.println(min-max);
//1  最大值加一 是最小值;最小值减一是最大值;System.out.println(max-min);//-1System.out.println(min-1);//2147483647System.out.println(max+1);//-2147483648  溢出的数也是有规律的。

复制代码

在这里以 4 位 2 进制为例讲解补码的编码规则:

(1)计算的时候如果超出 4 位数,就自动溢出舍弃,保持 4 位数不变。

(2)将 4 位 2 进制数分一半作为使用负数使用,0 在计算机中作为正数。

(3)最高位称为符号位,高位为 0 是正数,高位为 1 是负数。

11.jpg


intq=-1;
System.out.println(Integer.toBinaryString(q));
//11111111111111111111111111111111intd=-2;
System.out.println(Integer.toBinaryString(d));
//11111111111111111111111111111110inta=0;
Systeem.out.println(Integer.toBinaryString(a));//0  高位0省略



补码对称现象

12.jpg

公式:-n=~n+1   一个数的补码=这个数取反+1(取反(二进制数 0 变 1,1 变 0))

(正负都有效,除了最小值,最小值还是他本身)

0110(2)------61001(2)-------7-6=-7+1-n=~n+1;
inti=8;
System.out.println(~i);//-9



神秘的运算符

二进制中包含了 &,| ,>>>,<<, ~等多种运算符。


与运算:&

逻辑乘法

1&1=1;0&1=0;1&0=0;0&0=0;

计算规则

两个数上下对齐,对齐位数进行与运算。


经典应用

掩码(mask)运算(截取一个数的后 8 位)

intn1=0x632637de;
intn2=0xff;
intn3=n1&n2;
System.out.println(Integer.toBinaryString(n1));
//01100011 00100110 00110111 11011110System.out.println(Integer.toBinaryString(n2));
//00000000 00000000 00000000 11111111System.out.println(Integer.toBinaryString(n3));
//11011110拆分数据intn4=(n1>>>8)&n2;
intn5=(n1>>>16)&n2;
intn6=(n1>>>24)&n2;
System.out.println(n4);//55System.out.println(Integer.toBinaryString(n4));//00110111System.out.println(n5);//38System.out.println(Integer.toBinaryString(n5));//00100110System.out.println(n6);//99System.out.println(Integer.toBinaryString(n6));//01100011



或运算:|

两者都为 0 为 0,否则为 1

1 | 1 = 1,       1 | 0= 1,    0 | 1 = 1,    0 | 0 = 0


经典应用

可以将将字节数据合并

intb1=0x9d;
intb2=0x6f;
intb3=0xef;
intb4=0x33;
System.out.println(Integer.toBinaryString(b1));//10011101System.out.println(Integer.toBinaryString(b2));//01101111System.out.println(Integer.toBinaryString(b3));//11101111System.out.println(Integer.toBinaryString(b4));//00110011intb5=(b1<<24)|(b2<<16)|(b3<<8)|b4;
System.out.println(Integer.toBinaryString(b5));
//10011101 01101111 11101111 00110011


右移位运算符:>>>

运算规则 将数字向右移动,高位补充 0,低位溢出舍弃

>>>向右移动,高位永远补 0;

>>数位向右移动,高位为 1(负数)则补 1;高位为 0(正数)则补 0,保持符号位不变,其结果符合数学除法规律(自动向小方向取整)

n=00111101000110011100100101011011m=n>>>1m=00011110100011001110010010101101k=n>>>2k=00001111010001100111001001010110ints=0x3d19c95b;
intg=s>>>1;
intw=s>>>2;
System.out.println(Integer.toBinaryString(s));
//00111101 00011001 11001001 01011011System.out.println(Integer.toBinaryString(g));
//00011110 10001100 11100100 10101101System.out.println(Integer.toBinaryString(w));
//00001111 01000110 01110010 01010110inta1=-36;
inta2=a1>>>2;
inta3=a1>>2;
inta4=a1>>3;
System.out.println(a2);//1073741815System.out.println(a3);//-9System.out.println(a4);//-5System.out.println(Integer.toBinaryString(a1));
//11111111111111111111111111011100System.out.println(Integer.toBinaryString(a2));
//00111111111111111111111111110111System.out.println(Integer.toBinaryString(a3));
//11111111111111111111111111110111



左移位运算符:<<

将数字向左移动,低位补充为 0,高位溢出舍弃。

intf=10;
intt=f<<1;
inty=f<<2;
System.out.println(f);//10System.out.println(t);//20System.out.println(y);//40


非运算:~

1 取 0    0 取 1

~1 = 0       ~ 0 = 1

~(1001) = 0110


小彩蛋

    看到文章这里,是不是对于二进制已经有了不错的理解了,而且不知道你有没有发现不论在哪种情况下,1 和 0 这一对就从未分开过,属实甜到了。而且在“二进制”的爱情中,他们的感情只有 0 和 1,也就是只有双方哦。看到这,你是不是也羡慕了呢。在这里也祝友友们早点拥有自己的二进制爱情哦。

13.jpg


目录
相关文章
|
5月前
|
Java
当Java数据类型遇上“爱情”,会擦出怎样的火花?
当Java数据类型遇上“爱情”,会擦出怎样的火花?
66 1
|
5月前
|
算法 程序员
编码之舞:我的技术感悟
在代码的世界里,每一行都是舞步,每一个算法都是旋律。本文将带你走进一个程序员的内心世界,感受他在编程之旅中的喜悦与挑战,以及那些让他成长的关键时刻。从最初的迷茫到逐渐的清晰,这是一段关于技术、创新与自我实现的故事。让我们一起跟随作者的脚步,探索编程的艺术与科学,发现那些隐藏在键盘敲击声中的奥秘。
|
7月前
|
程序员 定位技术 C语言
老程序员分享:PaoptMap
老程序员分享:PaoptMap
37 1
|
8月前
|
监控 Java 应用服务中间件
硬核神作|2w字带你拿下Sentinal
硬核神作|2w字带你拿下Sentinal
|
架构师 大数据 项目管理
3000字,如何讲清楚专业知识? by彭文华
3000字,如何讲清楚专业知识? by彭文华
|
算法 程序员 C++
【算法集训 | 暑期刷题营】8.13题---字符串
【算法集训 | 暑期刷题营】8.13题---字符串
【算法集训 | 暑期刷题营】8.13题---字符串
|
存储 算法 编译器
【C与0的不解之缘】
【C与0的不解之缘】
251 0
【C与0的不解之缘】
|
C语言 C++
《C游记》 第一章 - 灵根孕育源流出 初识C言大道生(贰)
《C游记》 第一章 - 灵根孕育源流出 初识C言大道生(贰)
197 0
|
程序员 编译器 Python
《C游记》 第叁章 - 一朝函数思习得 模块思维世间生(贰)
《C游记》 第叁章 - 一朝函数思习得 模块思维世间生(贰)
125 0
|
算法 量子技术