计算机进制、位运算

article/2025/9/16 11:10:10

一、进制转换

1、什么是进制

进制是数学中的一个概念,就是数据“逢几进位”。进制就是进位制,是人们规定的一种进位方法。对于任何一种进制X,就表示某一位置上的数运算时逢X进一位。二进制就是逢二进一,八进制就是逢八进一,十进制就是逢十进一,十六进制就是逢十六进一。
Java中对整数常量提供了4种表现形式:二进制、八进制、十进制、十六进制。

2、为什么有二进制、八进制、十六进制

有二进制的原因是因为计算机最底层的电子元器件只有两种状态——高电平和低电平(有电和没电)。任何数据在计算机中都是以二进制的形式存在的,二进制早期由电信号开关演变而来的。一个整数在内存中一样也是二进制的,但是使用一大串的1或者0组成的数值进行使用很麻烦!有八进制、十六进制的原因是二进制表示同样的数值太长不方便阅读和记忆,二八进制和十六进制较短,方便阅读和记忆。

3、计算机中存储单位的换算

bit(比特):二进制每一位都是一个bit,二进制只能是0或1两个数字组成,比特是计算机中一个最小的信号单位。
byte(字节):一个bit只能表示两种信号或者两种状态,表示的范围很小!英文字母就有26个,还有标点符号,所以国际化标准组织就规定8个bit为一组,用来表示一个信息单元,是最小的信息单位。
8bit = 1byte
1kb = 1024byte
1mb = 1024kb
1gb = 1024mb
1tb = 1024gb

4、不同进制的组成

二进制是由0,1组成。以0b开头。
八进制是由0~7组成,以0开头。
十进制是由0~9组成,整数默认是十进制的1。
十六进制是由0~9和a~f(大小写都可以),以0x开头。(a=10,b=11,c=12,d=13,e=14,f=15)
public class Test1 {public static void main(String[] args) {int a = 100;System.out.println(a);System.out.println("------------------------------");int b = 0b100;System.out.println(b);System.out.println("------------------------------");int c = 0100;System.out.println(c);System.out.println("------------------------------");int d = 0x100;System.out.println(d);System.out.println("------------------------------");}
}

5、任意进制转十进制

先了解几个概念:
任意进制转十进制的规律:
  • 任意进制到十进制的转换都等于这个数据各个位上的系数 * 基数的权次幂相加的和。
如二进制(0b110)转为十进制: 0 ∗ 2 0 + 1 ∗ 2 1 + 1 ∗ 2 2 = 0 + 2 + 4 = 6 0*2^0 + 1*2^1 + 1*2^2 = 0 + 2 + 4 = 6 020+121+122=0+2+4=6
如八进制(0110)转为十进制: 0 ∗ 8 0 + 1 ∗ 8 1 + 1 ∗ 8 2 = 0 + 8 + 64 = 72 0*8^0 + 1*8^1 + 1*8^2 = 0 + 8 + 64 = 72 080+181+182=0+8+64=72
如十六进制(0XABC)转为十进制: 12 ∗ 1 6 0 + 11 ∗ 1 6 1 + 10 ∗ 1 6 2 = 12 + 176 + 2560 = 2748 12*16^0 + 11*16^1 + 10*16^2 = 12 + 176 + 2560 = 2748 12160+11161+10162=12+176+2560=2748

6、十进制转任意进制

规律:十进制数除目标基数取余数,直到商为0,余数反转。
如十进制(100)转为二进制:

在这里插入图片描述

如十进制(100)转为八进制:

在这里插入图片描述

如十进制(200)转为十六进制:

在这里插入图片描述

7、其他进制之间转换

以十进制作为桥梁,进行转换。如想将二进制转为八进制的步骤:

二、有符号数据表示法

1、有符号数定义

就是数据有正负之分就是有符号数,数据无正负之分就是无符号数据。如:+7、-7就是有符号数。

2、有符号数的组成

符号位 + 数值位(如:int i = +7;在计算机中表示0 0000000000000000000000000000111),java中int占4byte也就是32bit,左边第一位表示符号位,后面都表示数值位。
public class Test1 {public static void main(String[] args) {//+7的二进制位int i = 0b00000000000000000000000000000111;System.out.println(i);/*** 根据符号位表示正负可知,-7的二进制位是0b10000000000000000000000000000111,* 但是输出的结果却是-2147483641,这是因为计算机中存储有符号数的时候是按照补码* 形式存储的。*/int j = 0b10000000000000000000000000000111;System.out.println(j);}
}

3、为什么要有有符号数

因为在计算机内,有符号数有三种表示法原码、反码、补码而且所有数据的运算都是采用补码进行的。

4、什么是原码

就是二进制定点表示法,即最高位为符号位,0表示正,1表示负,其余位表示数值的大小。
注意:正数的原码、反码、补码都是一样的;负数的原码、反码、补码是不一样的。

5、什么是反码

反码就是除符号位不变,其它位全部0变为1,1变为0。正数的反码与其原码相同,负数的反码是对其原码逐位取反。

6、什么是补码

补码就是在反码的基础上+1就是补码。
+7的原码为:0b00000000000000000000000000000111
+7的反码为:0b00000000000000000000000000000111
+7的补码为:0b00000000000000000000000000000111
-7的原码为:0b10000000000000000000000000000111
-7的反码为:0b11111111111111111111111111111000
-7的补码为:0b11111111111111111111111111111001
public class Test1 {public static void main(String[] args) {//+7的二进制位int i = 0b00000000000000000000000000000111;System.out.println(i);/*** 根据符号位表示正负可知,-7的二进制位是0b10000000000000000000000000000111,* 但是输出的结果却是-2147483641,这是因为计算机中存储有符号数的时候是按照补码* 形式存储的。*/// -7的原码为:0b10000000000000000000000000000111// -7的反码为:0b11111111111111111111111111111000// -7的补码为:0b11111111111111111111111111111001int j = 0b11111111111111111111111111111001;/*** 计算机在显示的时候,会把补码转为原码,转换步骤如下:* 1、先将补码-1得到反码* 2、反码除符号位不变,其他为0变1,1变0,得到原码*/System.out.println(j);}
}

三、位运算

1、位运算概述

位指的是二进制位或者是bit位。计算机中所有的计算到计算机底层中都会变成位运算(就是二进制位的运算)。位运算可以提高程序的效率。

2、位运算符的种类

位运算符连接的操作数是数值类型(底层是二进制),位运算表达式的结果仍然是数值类型。
&:按位与两个同为1的时候结果才为1,否则结果为0。
|:按位或两个中只要有一个1,那么结果就为1,否则结果为0。
^:按位异或两个不一样的时候结果才为1,如果一样,结果就为0。一个数异或两次值不变。
~:按位取反与逻辑非是一样的,1变为0,0变为1。
<<:左移符号位保留不变,数据位左移几位,低位补0。字面上也就是操作数乘以2的n次幂。
>>:右移符号位保留不变,数据位右移几位,高位补符号位,即正数补0,负数补1。除2的n次幂。
>>>:无符号右移数据位右移几位,左边空位都补0(包括符号位),负数会变成正数。
注意:&、|、^是双目运算符,操作数有两个;~是单目运算符,操作数只有一个。
public class Test2 {public static void main(String[] args) {/*** 按位与:3 & 4结果是多少* 在进行位运算的时候要把数据转为二进制位,并且全部都是二进制补码形式!* 3的二进制:0b00000000000000000000000000000011* 4的二进制:0b00000000000000000000000000000100* 3&4:     0b00000000000000000000000000000000*/System.out.println("3 & 4 = " + (3 & 4));/*** 按位或:3 | 4结果是多少* 在进行位运算的时候要把数据转为二进制位,并且全部都是二进制补码形式!* 3的二进制:0b00000000000000000000000000000011* 4的二进制:0b00000000000000000000000000000100* 3|4:     0b00000000000000000000000000000111*/System.out.println("3 | 4 = " + (3 | 4));/*** 按位异或:3 ^ 4结果是多少* 在进行位运算的时候要把数据转为二进制位,并且全部都是二进制补码形式!* 3的二进制:0b00000000000000000000000000000011* 4的二进制:0b00000000000000000000000000000100* 3^4:     0b00000000000000000000000000000111*/System.out.println("3 ^ 4 = " + (3 ^ 4));/*** 按位取反:~3是多少* 在进行位运算的时候要把数据转为二进制位,并且全部都是二进制补码形式!* 3的二进制:0b00000000000000000000000000000011* ~3:      0b11111111111111111111111111111100 负数* 已知补码求原码:补码-1之后取反* 补码:0b11111111111111111111111111111100* -                                     1* ---------------------------------------* 反码:0b11111111111111111111111111111011* 原码:0b10000000000000000000000000000100*/System.out.println("~3 = " + (~3));}
}

左移运算:

public class Test3 {public static void main(String[] args) {/*** 左移:3<<2* 在进行位运算的时候要把数据转为二进制位,并且全部都是二进制补码形式!* 规则:符号位会被保留,数据位左移两位,低位补0* 3的二进制:0b00000000000000000000000000000011* 3<<2:    0b00000000000000000000000000001100*/System.out.println("3 << 2 = " + (3 << 2));System.out.println(0b00000000000000000000000000001100);/*** 左移:-3<<2* 在进行位运算的时候要把数据转为二进制位,并且全部都是二进制补码形式!* 规则:符号位会被保留,数据位左移两位,低位补0* -3的原码: 0b10000000000000000000000000000011* -3的反码: 0b11111111111111111111111111111100* -3的补码: 0b11111111111111111111111111111101* -3<<2:   0b11111111111111111111111111110100*/System.out.println("-3 << 2 = " + (-3 << 2));System.out.println(0b11111111111111111111111111110100);}
}

右移运算

public class Test4 {public static void main(String[] args) {/*** 右移:3>>2* 在进行位运算的时候要把数据转为二进制位,并且全部都是二进制补码形式!* 规则:符号位保留不变,数据位右移2位,高位补符号位* 3的二进制:0b00000000000000000000000000000011* 3>>2:    0b00000000000000000000000000000001*/System.out.println("3 >> 2= " + (3 >> 2));System.out.println(0b00000000000000000000000000000000);/*** 右移:-3>>2* 在进行位运算的时候要把数据转为二进制位,并且全部都是二进制补码形式!* 规则:符号位保留不变,数据位右移2位,高位补符号位* -3的原码: 0b10000000000000000000000000000011* -3的反码: 0b11111111111111111111111111111100* -3的补码: 0b11111111111111111111111111111101* -3>>2:   0b11111111111111111111111111111111*/System.out.println("-3 >> 2 = " + (-3 >> 2));System.out.println(0b11111111111111111111111111111111);}
}

无符号右移运算:

public class Test5 {public static void main(String[] args) {/*** 无符号右移:3>>>2* 在进行位运算的时候要把数据转为二进制位,并且全部都是二进制补码形式!* 规则:数据位右移2位,左边空位都补0(包括符号位),负数会变成正数* 3的原码:  0b00000000000000000000000000000011* 3>>>2:   0b00000000000000000000000000000000*/System.out.println("3 >>> 2= " + (3 >>> 2));System.out.println(0b00000000000000000000000000000000);/*** 无符号右移:-3>>>2* 在进行位运算的时候要把数据转为二进制位,并且全部都是二进制补码形式!* 规则:数据位右移2位,左边空位都补0(包括符号位),负数会变成正数* -3的原码: 0b10000000000000000000000000000011* -3的反码: 0b11111111111111111111111111111100* -3的补码: 0b11111111111111111111111111111101* -3>>>2:  0b00111111111111111111111111111111*/System.out.println("-3 >>> 2 = " + (-3 >>> 2));System.out.println(0b00111111111111111111111111111111);}
}

http://chatgpt.dhexx.cn/article/U9FwtbLT.shtml

相关文章

计算机一级二进制转十六进制,计算机进制之二进制、十进制、十六进制之间的转换...

释放双眼,带上耳机,听听看~! 1、计算机的数制介绍 数制:计数的方法,指用一组固定的符号和统一的规则来表示数值的方法 数位:指数字符号在一个数中所处的位置 基数:指在某种进位计数制中,数位上所能使用的数字符号的个数 位权:指在某种进位计数制中,数位所代表的大小,…

计算机的进制和运算

计算机的进制和运算 1. 基本概念2. 运算3. 逻辑右移和算术右移4. 浮点数6. 数据类型7. 指针8. ByteBuffer 1. 基本概念 计算机处理信息的最小单位是位&#xff0c;就相当于二进制中的一位。位的英文bit是二进制数位&#xff08;binary digit&#xff09;的缩写。 8位二进制数…

计算机系统中常用的进制,计算机常用进制详解

内容 进制的由来 生活中的常用进制 二进制的介绍 四种进制说明 八进制和十六进制 常用进制间的转换 1、进制的由来 进制&#xff1a;进位计数制 原始的计数方式 结绳计数 书契计数 算盘 正字计数法 2、生活中的常用进制 十进制 七进制(0~6&#xff0c;星期) 十二进制(0~11&…

计算机进制转换

文章目录 一.基本概念二.计算机的数值1.KIB、MIB与KB、MB的区别2.数值的表示 三.进制转换1.十进制的转换1.1十进制二进制的转换1.2十进制八进制的转换1.3十进制十六进制的转换 2.二进制八进制十六进制的转换2.1二进制八进制的转换2.2二进制与十六进制的转换2.3八进制十六进制的…

计算机进制转换(看完这一篇你就全懂了)—基础篇

我相信很多人都学过进制的转换&#xff0c;但是总是转不过来&#xff0c;你只需要看完这一篇&#xff0c;你对进制的理解与转换一定会很熟练。 众所周知计算机只能识别0和1&#xff0c;其他的文字、数字、字符只能通过转换成进制&#xff0c;然后让计算机识别&#xff0c;并显示…

一文带你读懂计算机进制

hi&#xff0c;大家好&#xff0c;我是开发者FTD。在我们的学习和工作中少不了与进制打交道&#xff0c;从出生开始上学&#xff0c;最早接触的就是十进制&#xff0c;当大家学习和使用计算机时候&#xff0c;我们又接触到了二进制、八进制以及十六进制。那么大家对进制的认识和…

计算机进制转换a是什么,[计算机基础] 计算机进制转换:二进制、八进制、十进制、十六进制...

计算机进制转换&#xff1a;二进制、八进制、十进制、十六进制 一、什么是进制 在生活中&#xff0c;我们通常都是使用阿拉伯数字计数的&#xff0c;也就是10进制&#xff0c;以10为单位&#xff0c;遇10进一&#xff0c;所以是由0&#xff0c;1&#xff0c;2、3、4、5、6、7、…

用计算机进行进制换算方法,计算机进制怎么转换?计算机进制换算方法

如果你正在学习计算机知识,必然需要掌握计算机进制的换算方法。很多同学对于进制换算已经炉火纯青,即便我们可以使用科学计算器程序进行换算,但多数时候使用计算器还没有我们心算更快呢,你说是吧。如果是复杂式我们还需要打草稿,使用计算器反而添乱。阅读下文了解计算机进…

计算机中的进制

进制概念 今天我们来复习一下进制之间的转换&#xff0c;首先我们先来了解一下什么是进制&#xff1f;进制也就是人们规定的一种进位的方法&#xff0c;比如二进制就是逢二进一&#xff0c;也就是说0&#xff0c;1之后就该进位&#xff0c;然后就是10&#xff0c;11&#xff0c…

计算机中的进制(二进制,八进制,十进制,十六进制)

编写背景 最近做了个项目&#xff0c;对接蓝牙设备通信&#xff0c;对接的时候第三方的设备需要协议加密&#xff0c;就用到了位运算(&,>>,<<),只是这个加密算法不是我写的&#xff0c;是公司的架构师写的&#xff0c;他是写java的。呵呵呵…我看了他的javasc…

计算机进制转换:二进制、八进制、十进制、十六进制

一、什么是进制 在生活中&#xff0c;我们通常都是使用阿拉伯数字计数的&#xff0c;也就是10进制&#xff0c;以10为单位&#xff0c;遇10进一&#xff0c;所以是由0&#xff0c;1&#xff0c;2、3、4、5、6、7、8、9组成的&#xff1b;而在计算机中&#xff0c;计算机是无法…

计算机的进制转换

目录 一、计算机的数制1.1数制1.2数位1.3基数1.4位权 二、数制的表示三、数制分类3.1十进制3.2二进制3.3十六进制 四、数制转换4.1二进制、十六进制转换为十进制4.2二进制转换为十六进制4.3十进制转换为二进制、十六进制4.4常见的八位二进制数 五、存储量总结 一、计算机的数制…

计算机基础--进制转换

计算机基础之进制转换 一、什么叫进制&#xff08;system&#xff09; 学习进制转换之前&#xff0c;我们要先知道什么是进制&#xff0c;进制也就是进位计数制&#xff0c;对于任何一种进制——n进制&#xff0c;就表示每一位置上的数运算时都是逢n进一位&#xff0c; 十进制…

计算机中的数制

文章目录 一、计算机中的各种数制1. 十进制2. 二进制3. 十六进制 二、不同数制间数的转换1. 二进制和十进制数间的转换&#xff08;1&#xff09;十进制整数转换成二进制整数&#xff08;2&#xff09;十进制小数转换成二进制小数 2. 十六进制和十进制数间的转换&#xff08;1&…

worklist 设备对接,pe 为例

1.部署worklist 服务&#xff0c;确保网路通畅。 2.在ct 机器配置服务器信息,包括ip port.aetitle,不同厂家配置方法不同。 3.更新患者列表&#xff0c;拉取服务器list 注意&#xff1a;返回列表中不能有中文 4.患者选择&#xff0c;查看患者详细信息 5.CT 机设置 注意&#…

Typo: In word ‘worklist‘

Typo: In word worklist 使用pycharm编辑的程序员&#xff0c;这条绿线对与像我这样的人来说&#xff0c;不能忍受&#xff0c;所以。。。 File>>Settting打开设置&#xff0c;如下图&#xff0c;先搜索inspections&#xff0c;在搜索Typo&#xff0c;把勾去掉 OK了&…

DICOM通讯(ACSE->DIMSE->Worklist)

下文中的worklist交互的测试数据&#xff0c;请在资源中下载&#xff0c;需要wireshark将文件打开&#xff0c;并且加入过滤条件ip.addr 192.168.2.193 and tcp.port 104 &#xff0c;并且选择dicom协议。 1 DICOM通讯概要介绍 DICOM通讯和TCP IP的设计原理别无二致。从用户数…

List..

List的使用 test.cpp #include <iostream> #include <list> #include <vector> using namespace std; namespace std {void test_list1(){//初始化list<int> lt1;//10个5list<int> lt2(10, 5);//自己的迭代器来初始化list<int> lt3(lt2.…

dicom worklist、pacs环境搭建

dcmtk的安装和使用 OFFIS DICOM 工具包 官网&#xff1a;dicom.offis.de - DICOM Software made by OFFIS - DCMTK - DICOM Toolkit windows版本下载地址&#xff1a;https://dicom.offis.de/download/dcmtk/dcmtk366/bin/dcmtk-3.6.6-win64-dynamic.zip 部分工具包使用方法…

dcmtk在PACS开发中的应用(基础篇) 第三章 工作列表(Work List)(一)( BY 冷家锋)

觉得对您有帮助&#xff0c;欢迎打赏&#xff08;打赏码在文末&#xff09;&#xff0c;欢迎切磋。 博客不常来&#xff0c;评论不一定都能看到&#xff0c;看到了我会尽力回复&#xff08;更新于2019年7月26日&#xff09; 第三章 工作列表&#xff08;Work List&#xff09…