位运算笔记

本文详细介绍了C/C++中的基本数字类型,包括double、float、int、bool以及它们的各种修饰词,如long、unsigned、short。同时,讲解了char类型的存储方式以及在内存中的ASCII表示。此外,还探讨了计算机底层的二进制存储和运算,特别是位运算,如与、或、异或、取反和移位操作。通过实例展示了这些运算的应用,例如交换变量值和记录开关状态。
摘要由CSDN通过智能技术生成

计算机中的数字

在C/C++中有以下几种基本数字类型:doublefloatintbool;以及longunsignedshort等可以用来修饰其中一种或者几种的类型修饰词。另外地,char基本类型在内存中也是以数字形式存储的,是占一个字节的ASCII码。通常默认设置下打印出来的结果是十进制的形式,然而在计算机底层存储的则是以二进制的形式。从加减乘除等运算来看,进制对结果并没有实质影响,只是表现形式有差异。计算机中的位运算是基于二进制的整型进行的,然而返回的结果却可能是十进制或者其他形式。

几种类型的具体存储形式:(一个字节对应8位)
char 一个字节
int 四个字节
float 四个字节
double 八个字节

另外三种修饰词表示:
short 一半的位数
long 一倍的位数
signed & unsigned 不改变位数,无符号类型存储的值上限会翻倍因为第一位的符号位被用来记录数据

一个字在不同的处理器中定义是不一样的:根据系统的位数可以是32位或者64位,嵌入式之类的原始处理器可能也会是16位或者更低。
32位系统下:1word=32bits=4bytes
64位系统下:1word=64bits=8bytes

运算法则

与操作:& AND 两者中都为1则为1;
或操作: OR 两者中有一个为1则为1;
异或操作:^ XOR 或操作取反;
取反操作:~ NOT 单目运算符,取反的操作;
左移操作:<< 将二进制数往左移对应的位数,并补零;
右移操作:>> 将二进制数往右移对应的位数,最左边如何处理看编译规则。

下面给出一些运算实例:

unsigned int a = 60;      // 60 = 0011 1100  
unsigned int b = 13;      // 13 = 0000 1101
int c = 0;           
 
 c = a & b;             // 12 = 0000 1100
 
 c = a | b;             // 61 = 0011 1101
 
 c = a ^ b;             // 49 = 0011 0001
 
 c = ~a;                // -61 = 1100 0011
 
 c = a << 2;            // 240 = 1111 0000
 
 c = a >> 2;            // 15 = 0000 1111

特别地,位当中的或/与运算和逻辑当中的或与运算不一样:逻辑中为&&和||,位当中为&和|,各自针对的类型也不一样。

位运算有关的算法

1)交换变量的值:原理为位运算的逆运算为自身,三次运算中只出现三个不同的值。

x = x ^ y;
y = x ^ y;
x = x ^ y;

2)记录每个位置的情况:对于N个开关,左移N位记录他的通断情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值