C语言_位运算1

关于位运算相关内容分为两个大博文,分别为位运算1,即该博文;主要介绍二进制、位、字节的基本概念、进制转换问题,以及C的~ & | ^ 按位运算符及应用方法

由于篇幅限制,位运算2主要讲述左移和右移运算及编程练习以及字段运算

0.引入

0.1 位运算的应用方向
  1. 想硬件设备发送一两个字节来控制这些设备,其中每个位(bit)都有特定含义
  2. 与文件相关的操作系统信息经常被存储,通过使用特定位表明特定项
  3. 许多压缩和加密操作都是直接处理单独的位

通过应用可以看出,位运算主要应用在计算机软件与硬件交互的过程中使用,或者可以说是更底层的东西

C语言也是编写设备驱动程序和嵌入式开发的首选语言

0.2 二进制数、位和字节

二进制数(binary number):

以2为基底表示的数字被称为二进制数

例如二进制数1101可表示为:1x23+1x22+0x21+1x20

二进制系统可以把任意整数表示为0和1的组合,关于进制转换问题请参考博文进制转换相关内容

0.2.1 二进制整数

通常,1字节包含8位。C语言用字节(byte)表示存储系统字符集所需的大小

所以C字节可能是8位、9位、16位或其它值。但是,描述存储器芯片和数据传输率中所用的字节指的是8位字节。

本博文内容假设1字节=8位
通常用用术语 八位组(octet) 这个术语特指8位字节

计算机中从左往右给八位分别变好7~0。编号为7的成为高阶位(high-order bit) ,编号是0的位称为低阶位(low-oder bit) 每一位对应2的相应指数
位编号和位值
如上图,1字节能表示的最大数字为11111111 其对应的十进制值为255

11111111=1x27+1x26+1x25+1x24+1x23+1x22+1x21+1x20=255

因此1字节可以存储0~255范围内的数字,总共256个值

对于unsigned char 中1字节存储范围为0~255,
对于signed char 中1字节表示范围为-128~+127

0.2.2 有符号整数

如何表示有符号整数取决于硬件,而不是C语言。一般地,C中用高阶位状态1表示负数,高阶位0表示正数

针对具体数的表示问题上及硬件关系,提出数的源码、反码、补码表示方法,具体请参见博文源码、反码、补码部分

0.2.3 二进制浮点数

浮点数分为两部分存储:二进制小数和二进制指数

1. 二进制小数表示方法

.101 的二进制表示为:1/21+0/22+1/23
.101 的十进制表示为:1/2+0/4+1/8=0.5+0+0.125
即,.101对应的十进制值为0.625

可以看出,二进制的表示法以2的指数进行计算,即二进制表示法只能精确的表示多个1/2的幂的和。

3/4和7/8可以精确的表示为二进制小数,但1/3和2/5却不能

2. 浮点数表示方法:

(此处没有理解)
小数表示方法

1. 其它进制数

其它进制数包括八进制和十六进制数,相关内容参看博文:八进制、十六进制部分

2. C按位运算符

C中有两个操作位的工具。第一个工具为一套(6个)作用于位的按位运算符,第二个工具是字段(field) 数据形式,用于访问int中的位。该部分将介绍相关按位运算符。

按位运算符分为两类:一类是按位逻辑运算符,另一类是位移运算符

2.1 按位逻辑运算符

对于按位逻辑运算符请注意:

  1. 4个按位逻辑运算符用于整型数据,包括char
  2. 按位(bitwise)运算是因为这些操作都是只针对每一位进行操作,而不影响它的左右两边的位。
  3. 不要把按位运算符于常规的逻辑运算符混肴,常规的逻辑运算符操作的是整个值
<
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值