1, 整数表示

一,布尔代数表示

0UL--------无符号长整型0

1UL--------无符号长整型1

1, 位运算

a = [0110], b = [1100]

  1. &
     0110
    &1100
     0100
  1. |
     0110
    |1100
     1110
  1. ^
     0110
    ^1100
     1010
  1. ~
    ~1100
     0011

2, 分配侓

  1. 布尔运算侓 & 对 | 的有分配侓
  2. 布尔运算侓 | 对 & 的有分配侓
a * (b + c) = (a + b) + (a + c) ==> a & (a | b) = (a & b) | (a & c)  

位向量一个很有用的应用就是表示有限集合。我们可以用位向量
[a_{w-1}, a_{w-2} ..., a_0]编码任何子集A\subseteq {0, 1, ..., w - 1}, 其中 a_i = 1 当且仅当 i\in A 。 例如(记住是把a_{w - 1} 写在左边, 而将 a_0 写在右边。), 位向量 a = [01101001]表示集合 A = {0, 3, 5, 6}, 而 b = [01010101] 表示集合 B = {0, 2, 4, 6}。 使用这种编码集合的方法, 布尔运算 | 和 & 分别对应于集合的并和交, 而 ~ 对应于于集合的补。

还是分配侓a&b得到位向量[01000001], 而 A \cap B = {0, 6}

3, 运用位级计算

void inplace_swap(int *x, int *y)
{
    *y = *x ^ *y;
    *x = *x ^ *y;
    *y = *x ^ *y;
}
  1. 交换数组中第一元素和最后一个元素

void reverse_array(int a[], int cnt)
{
    int first, last;
    for (first = 0, last = cnt - 1; first <= last; ++first, --last)
    {
        inplace_swam(&a[first], &a[last]);
    }
}

上面代码有一个问题 就是奇数时会错误

cnt = 2k - 1

4, 移位运算

位的表示 A = [X_{w - 1}, X_{w - 2}, ... , X0]

1, 左移(<<)

A << k \Longrightarrow [X_{w - k - 1}, X_{w - k - 2}, ... , X0, 0, 0, 0_k]

2, 右(>>) --有点奇葩

分为两种情况:

<font color = red>

  1. 逻辑右移
  2. 算术右移

</font>

  • 逻辑右移

右移在左端补k个0

A >> k \Longrightarrow [0, 0, 0, 0_k, X_{w - 1}, X_{w - 2}, ... , X0]

  • 算术右移

算术右移在左端补k个最高位有效的值

A >> k \Longrightarrow [X_{w - 1}, X_{w - 1}, ..., X_{w - 1}, X_{w - 1}, X_{w - 2}, ... , X0]

看一下实例

操作
参数 [0110 0011] [1001 0101]
x << 4 [0011 0000] [0000 0101]
x >> 4 (逻辑右移) [\mathsf{0000} 0110] [\mathsf{0000} 1001]
x >> 4 (算术右移) [\mathsf{0000} 0110] [\mathsf{1111} 1001]

5.1,整数表示

描述位来编码整数的两种不同的方式:

<font color = red>

一种只能表示非负数, 二别一种能够表示负数, 零和整数
</font>

下面是一些术语

符号 类型 含义
B2T_w 函数 二进制转补码
B2U_w 函数 二进制转无符号数
U2B_w 函数 无符号数转换二进制
U2T_w 函数 无符号数转换补码
T2B_w 函数 补码转二进制
T2U_w 函数 补码转无符号数
TMin_w 常数 最小补码值
TMax_w 常数 最大补码值
UMax_w 常数 最大无符号数
+_w^t 操作 补码加法
+_w^u 操作 无符号数加法
*_w^t 操作 补码乘法
*_w^u 操作 无符号数乘法
-_w^t 操作 补码取反
-_w^u 操作 无符号数取反

<font color = red>
下标w表示数据表示中位数
</font>

5.2 整数数据类型

32位机器

C数据类型 最小值 最大值
[signed] char -128 127
unsigned char 0 255
short -32768 32767
unsigned short 0 65535
int -2147483648 2147483647
unsigned int 0 4294867295
long -2147483648 2147483647
unsigned long 0 4294967295
int32_t -2147483648 2147483647
uint32_t 0 4294867295
int64_t -9224472036854775808 9224472036854775807
uint64_t 0 18446744073709551615

C/C++都是支持有符号(默认)和无符号数。 Java只支持有符号数

5.3 无符号数的编码

有一个整数类型是有w位,我们可以将位向量写成 \vec X, 表示整个向量, 或者[X_{w - 1}, X_{w - 2}, ... , X_0], 表示向量中每一位。把\vec X 看做一个二进制表示的数, 就获取了 \vec X 的表示。在整个编码中国, 每个位 X_i 都取值为0或1, 我们使用一个函数 B2U_w

原理: 无符号数编码的定义

对向量 \vec X \Longrightarrow [x_{w - 1}, x_{w - 2}, ..., X_0]

B2U_w(\vec x) == \sum_{i = 0}^{w - 1}{x_i}{2^i}

下面是几种情况

B2U_4([0001]) = 0 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0 = 0 + 0 + 0 + 1 = 1

B2U_4([0101]) = 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 0 + 4 + 0 + 1 = 5

B2U_4([1011]) = 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 = 8 + 0 + 2 + 1 = 11

B2U_4([1111]) = 1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 1 * 2^0 = 8 + 0 + 2 + 1 = 15

\sum_{i=1}^n{a_i}

矢量
\vec A

\overrightarrow{xy}

\mathsf{A}

\mathbb{A}

\mathtt{A}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容

  • 高级运算符 文档地址 作为 基本运算符 的补充,Swift 提供了几个高级运算符执行对数传值进行更加复杂的操作。这...
    hrscy阅读 833评论 0 2
  • 本章我们来研究三种重要的数字表示 无符号是基于传统二进制表示法,表示大于或等于0的数字 补码是表示有符号整数的最常...
    程序员必修课阅读 1,004评论 2 2
  • 草根作家说真经 鸡泽“一溜村派”草根诗人、作家范振民作品新鲜、活泼、真实、自然,有人向他请教写作经验,他说...
    邯郸赵金海阅读 420评论 0 1
  • 每一个不曾起舞的日子,都是对生命的辜负。 ---题记 种子的力量有多大?种子在冲破泥土时...
    莒县1540夏晓丽阅读 847评论 5 6
  • 1 猴子坐在被告席上,一脸平静,父亲坐在台下紧张的额头冒汗。母亲没有来,律师说他这属于第三方介入,一般是判死刑,母...
    心莲0205阅读 618评论 6 3