Chinaunix首页 | 论坛 | 博客
  • 博客访问: 173378
  • 博文数量: 45
  • 博客积分: 1228
  • 博客等级: 中尉
  • 技术积分: 450
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-26 11:37
文章分类
文章存档

2013年(4)

2012年(3)

2011年(20)

2010年(18)

我的朋友

分类: LINUX

2010-09-16 10:54:19

2010-9-11

今日内容:

       熊磊光老师 Email lxiongleig@gmail.com

              正数                     负数

              5                          -5

原码       00000101          00000101

反码       00000101          11111010按位取反

补码       00000101          11111011加一

位运算符

计算机中为什么会用补码表示负数?

如果用在正数最高位置1的方式表示负数会存在 0的表示不唯一,在计算机中做减法运算都是加一个负数实现的,如果用这种表示方式,需要经过:比较符号位,比较绝对值,加法改减法,减法改加法,小数减大数改成大数减小数……等运算,非常不便于做减法运算。

补码为什么是按位取反,末位加1的?

A,B 八位二进制数。例子:(A- B= A+(0xff + 0x01 – 0x100) –(B)

 = (A) +(0xff – (B) +1) -0x100= (A) + (B的补码) – 0x100(产生的高位溢出)

显式类型转换,隐式类型转换

2010-09-13

今日内容:

       郭同彬老师:Email guotongbinakaedu.org

       1.当小数据类型向大数据类型转换时要保证数据符号(正负)

       2.当大数据类型想小数据类型转换时采取截取的方式转换。

       当两个字符类型的变量相加时会产生整形提升,先将字符形变为整形,再做相加。

       当有符号数向无符号数转换时会先将有符号书转换为无符号数

       区分b << 1 b <<= 1 前者b的值没有改变。浮点数做判断是否相等时,不能用==,需要判断其差是否为一个可控范围内 dx 是否小于某个值。

       objdump -ds file.o > file.s 对程序进行反汇编。sizeof 中的表达式 不做计算。任何小于整形的类型作运算时,都要作整形提升。

       位运算:& |^异或,~非,

       掩码:读操作,置1,归零运算。

              读:unsigned int a, b, mask= 0x0000ff00;

                     a = 0x12345678;

                     b = (a & mask) >> 8// 0x00000056;

              1unsigned int a, b, mask = 0x0000ff00;

                     a = 0x12345678;

                     b = a | mask; // 0x1234ff78;

              归零:unsigned int a, b, mask = 0x0000ff00;

                     a = 0x12345678;

                     b = a &~mask; //0x12340078;

       异或操作:

                     任何数和0异或总保持其原值,和1异或都会翻转原值。

阅读(1641) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-09-16 16:57:18

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com