鱼C论坛

 找回密码
 立即注册
查看: 5702|回复: 7

[学习笔记] 基本数据类型与表达式04 - 零基础入门学习Delphi005

[复制链接]
发表于 2017-6-12 22:21:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冬雪雪冬 于 2017-6-14 21:57 编辑

这节课主要学习位运算,说到位运算,就不得不说到二进制。我们说到计算机的存储单位是Byte,但还有更小的Bit,对就是位。一个Byte等于8Bit。而位运算则是对数字的二进制的每个位做操作。
一共有7个位运算符。
  
位运算符
  
含义
单目运算符
Not
对右边操作数的二进制按位取反
双目运算符
And
对两个操作数二进制按位与
Or
对两个操作数二进制按位或
Xor
对两个操作数二进制按位异或
Shl
对左边操作数二进制按位左移左边操作数的位
Shr
对左边操作数二进制按位左移右边操作数的位
还是用实例说话吧。
位运算的操作数只能为整数,为了简单选2个只占1Byte8bit)的数,即定义成Shortint类型。
a:= 124
b:=41


Not 178,每位0110
  
a
  
0
1
1
1
0
0
1
0

114
Not a
1
0
0
0
1
1
0
1

-115
正好是原数字加一后取反。

a And b,每位都是11,否则为0
  
a
  
0
1
1
1
0
0
1
0

114
b
0
0
1
0
1
0
0
1

41
a And b
0
0
1
0
0
0
0
0

32

a Or b,每位都是00,否则为1
  
a
  
0
1
1
1
0
0
1
0

114
b
0
0
1
0
1
0
0
1

41
a Or b
0
1
1
1
1
0
1
1

123

a Xor b,每位不同为1,否则为0
  
a
  
0
1
1
1
0
0
1
0

114
b
0
0
1
0
1
0
0
1

41
a Xor b
0
1
0
1
1
0
1
1

91

a Shl 2,每位前移2位,前2位舍掉
  
a
  
0
1
1
1
0
0
1
0

114
a Shl 2
1
1
0
0
1
0
0
0

200
Shl 2相当于×4等于456,但前2位舍掉了,即减掉了256,所以等于200

a Shr 1,每位后移1位,最后1位舍掉
  
a
  
0
1
1
1
0
0
1
0

114
a Shr 2
0
0
1
1
1
0
0
1

57
Shr 1相当于 div 2等于57

与运算符可以查看数字的二进制某位是1还是0,将这个数与01000000相与,如果等于0则这个数右数第七位是0,反之则为1,即我们常说的“掩码”。同样还可以将小写英文字母的ascii码转换为大写的,因为小写的ascii和大些的相差正好32,我们将小写and 11011111即可,同理大写转小写是大写的ascii or 00100000
Xor可用于将某些位取反,需要取反的位异或1,不需要的异或0。异或后再次相同的异或则恢复原来的数值。

后半部分的编程题是分别做两个计算器
程序1的特点是有了位图的背景,方法是加入一个Image控件,并导入图片.同时把FormBorderStyle的属性改为bsSizeToolWin,这样窗体的大小就固定了,不会被用户改变。
2.jpg
程序2更类似传统的计算器,简化一下,就没有做图像背景。
3.JPG
这里为了判断按下等号时做什么运算,提前使用了case语句。另外这次还把Edit的内容靠右对齐,这个功能delphi没有,就用了windowsAPI函数。具体的操作如下:
SetWindowLong(Edit1.Handle, GWL_STYLE,GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_RIGHT);
Edit1.invalidate;
ES_RIGHT可以改为ES_LEFTES_CENTER。另外通过invalidate使Edit失效再重新生成,使ES_RIGHT生效。
另外我们看到了一个Or操作符,可以看出GetWindowLong是个数值,其中有2位代表了对齐方式,通过与ES_RIGHT或操作,在不改变其他位的前题下,修改这2位。(为什么不是以为呢?)
由于程序的内容比较长,就作为附件放上来了。

005-1.ZIP

270.89 KB, 下载次数: 40

005-2.ZIP

202.72 KB, 下载次数: 70

评分

参与人数 1鱼币 +10 收起 理由
小甲鱼 + 10 支持楼主!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-14 08:47:32 | 显示全部楼层
哇。感觉楼主学的好仔细啊,我是不是太着急了点,我也才开始学,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-14 10:04:49 | 显示全部楼层
lamjj 发表于 2017-6-14 08:47
哇。感觉楼主学的好仔细啊,我是不是太着急了点,我也才开始学,

我也是刚刚开始学delphi,希望能初步掌握这门语言。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-25 14:07:47 | 显示全部楼层
版主。。可以实现在计算器V3里 加入And Not Or 功能吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-25 19:49:57 | 显示全部楼层
naizhu 发表于 2018-2-25 14:07
版主。。可以实现在计算器V3里 加入And Not Or 功能吗?

很容易实现的,你先试试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-17 12:21:53 | 显示全部楼层
厉害!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-25 20:53:36 | 显示全部楼层
shl  和 shr   我都要疯了 为了搞清楚这个.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-13 22:14:17 | 显示全部楼层
楼主再说shl  和 shr 的时候 笔误. 把我脑袋都弄晕了.
原题和结果都是 十进制
比如 A 等于114   那么 A shl 2    结果就是456    而456的二进制是 111001000
       A 等于114    那么a shr 2  结果就是 28    114/4等于28.5    小数则被程序自动忽略了,因为是整数型的.
以下是复制粘贴某大神的 平民化解释
x:=x shl 1 二进制数向左移1位,尾部补1个零,相当于x:=x*2;
x:=x shl 2 二进制数向左移2位,尾部补2个零,相当于x:=x*4;
...
x:=x shl n 二进制数向左移n位,尾部补n个零,相当于x:=x*2^n;

x:=x shr 1 二进制数向右移1位,首部补1个零,相当于x:=x div 2;
x:=x shr 2 二进制数向右移2位,首部补2个零,相当于x:=x div 4;
...
x:=x shr n 二进制数向右移n位,首部补n个零,相当于x:=x div (2^n);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-21 22:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表