iOS学习笔记之字节操作

二进制、十进制、十六进制

  • 十进制转二进制

正整数

除二取余,然后倒序排列,高位补零

负整数

先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一

  • 十进制转十六进制

小数部分

对小数点以后的数乘以2,有一个结果吧,取结果的整数部分(不是1就是0喽),然后再用小数部分再乘以2,再取结果的整数部分……以此类推,直到小数部分为0或者位数已经够了就OK了。然后把取的整数部分按先后次序排列就OK了,就构成了二进制小数部分的序列

  • 二进制转十进制

首先将二进制数补齐位数,首位如果是0就代表是正整数,如果首位是1则代表是负整数。
先看首位是0的正整数,补齐位数以后,将二进制中的位数分别将下边对应的值相乘,然后相加得到的就为十进制。
若二进制补足位数后首位为1时,就需要先取反再换算

十进制转十六进制以及十六进制转十进制

方法同上,区别是一个除以2,一个除以16

注:10 -> A, 11 -> B, 12 -> C, 13 -> D, 14 -> E, 15 -> F

左移、右移

  • 左移<<

用来将一个数的各二进制位全部左移若干位
高位舍弃,低位补0;
简单介绍一种方便计算的方法:
8 << 1的值为82=16;
8 << 2的值为8
(2^2)=32;
8 << n的值为8*(2^n)

  • 右移>>

用来将一个数的各二进制位全部右移若干位;
符号位向右移动后,正数的话补0,负数补1
简单介绍一种方便计算的方法:
8 >> 1的值为8/2=4;
8 >> 2的值为8/(2^2)=2;
8 >> n的值为8/(2^n)

逻辑运算符

  • &

按位与运算按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&5可写算式如下: 00001001 (9的二进制补码)&00000101 (5的二进制补码) 00000001 (1的二进制补码)可见9&5=1。
按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 ,保留低八位,可作 a&255 运算 ( 255 的二进制数为0000000011111111)。

  • |

按位或运算按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
例如:9|5可写算式如下: 00001001|00000101
00001101 (十进制为13)可见9|5=13

  • 异或^

按位异或运算按位异或运算符“”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如95可写成算式如下: 00001001^00000101 00001100 (十进制为12)

  • ~

求反运算求反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。例如~9的运算为: ~(0000000000001001)结果为:1111111111110110

  • 左移运算符<<

左移运算左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。例如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。

  • 右移运算符>>

右移运算右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。例如:设 a=15,a>>2 表示把000001111右移为00000011(十进制3)。应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。

你可能感兴趣的:(iOS学习笔记之字节操作)