当前位置:编程学习 > VB >>

VB6中类型转换的问题

看到有如下一段代码

DIM A AS LONG ,B AS BYTE 

B=A AND &HFF&

上述代码中,牵扯到类型转换的问题,B作为一个BYTE型变量,如何能接收A AND &HFF&的结果,

请问哪儿有介绍VB6中此类  类型强制转换的资料。谢谢大家 --------------------编程问答-------------------- 当你定义为byte型的时候,分配给它的内存只有那么多啊,怎么能接收long类型的结果?不准确是铁定的 --------------------编程问答-------------------- 你又想它为byte类型,又想用它来实现你题目的意图,那是不可能的。除非换个类型的变量。 --------------------编程问答-------------------- MSDN中有类型强制转换的资料的详细介绍
--------------------编程问答-------------------- 关于类型自动转换,你可以认为编译器自动解释为下面的语句。
因为通过 And &HFF& 只取了最低字节,所以表达式值的范围与 Byte 的值范围一致,没用错误。
B=CByte(A And &HFF&)
--------------------编程问答--------------------
引用 4 楼 tiger_zhao 的回复:
关于类型自动转换,你可以认为编译器自动解释为下面的语句。
因为通过 And &HFF& 只取了最低字节,所以表达式值的范围与 Byte 的值范围一致,没用错误。

VB code
B=CByte(A And &HFF&)
CByte可以转换,不保证结果是对的 --------------------编程问答-------------------- VB的所有强制类型转换函数详细介绍:http://1230c.co.cc/vb/?typeid=9&libid=173 --------------------编程问答-------------------- 类型转换函数
      

每个函数都可以强制将一个表达式转换成某种特定数据类型。

语法
CBool(expression)

CByte(expression)

CCur(expression)

CDate(expression)

CDbl(expression)

CDec(expression)

CInt(expression)

CLng(expression)

CSng(expression)

CStr(expression)

CVar(expression)

CStr(expression)

必要的 expression 参数可以是任何字符串表达式或数值表达式。

返回类型
函数名称决定返回类型,如下所示:

函数 返回类型 expression 参数范围 
CBool  Boolean 任何有效的字符串或数值表达式。 
CByte  Byte 0 至 255。 
CCur Currency -922,337,203,685,477.5808 至922,337,203,685,477.5807。 
CDate Date 任何有效的日期表达式。 
CDbl Double  负数从 -1.79769313486232E308 至 -4.94065645841247E-324;正数从 4.94065645841247E-324 至 1.79769313486232E308。 
CDec Decimal 零变比数值,即无小数位数值,为 
+/-79,228,162,514,264,337,593,543,950,335。对于 28 位小数的数值,范围则为 
+/-7.9228162514264337593543950335;最小的可能非零值是 0.0000000000000000000000000001。 
CInt Integer -32,768 至 32,767,小数部分四舍五入。 
CLng Long -2,147,483,648 至 2,147,483,647,小数部分四舍五入。 
CSng Single 负数为 -3.402823E38 至 -1.401298E-45;正数为 1.401298E-45 至 3.402823E38。 
CStr String 依据 expression 参数返回 Cstr。 
CVar Variant 若为数值,则范围与 Double 相同;若不为数值,则范围与 String 相同。 


说明
如果传递给函数的 expression 超过转换目标数据类型的范围,将发生错误。

通常,在编码时可以使用数据类型转换函数,来体现某些操作的结果应该表示为特定的数据类型,而不是缺省的数据类型。例如,当单精度、双精度或整数运算发生的情况下,使用 CCur 来强制执行货币运算。

应该使用数据类型转换函数来代替 Val,以使国际版的数据转换可以从一种数据类型转换为另一种。例如,当使用 Ccur 时,不同的小数点分隔符、千分位分隔符和各种货币选项,依据系统的国别设置都会被妥善识别。

当小数部分恰好为 0.5 时,Cint 和 CLng 函数会将它转换为最接近的偶数值。例如,0.5 转换为 0、1.5 转换为 2。Cint 和 CLng 函数不同于 Fix 和 Int 函数,Fix 和 Int 函数会将小数部分截断而不是四舍五入。并且 Fix 和 Int 函数总是返回与传入的数据类型相同的值。

使用 IsDate 函数,可判断 date 是否可以被转换为日期或时间。Cdate 可用来识别日期文字和时间文字,以及落入可接受的日期范围内的数值。当转换一个数字成为日期时,是将整数部分转换为日期,小数部分转换为从午夜起算的时间。

CDate 依据系统上的国别设置来决定日期的格式。如果提供的格式为不可识别的日期设置,则不能正确判断年、月、日的顺序。另外,长日期格式,若包含有星期的字符串,也不能被识别。

CVDate 函数也提供对早期 Visual Basic 版本的兼容性。CVDate 函数的语法与 CDate 函数是完全相同的,不过,CVDate 是返回一个 Variant,它的子类型是 Date,而不是实际的 Date 类型。因为现在已有真正的 Date 类型,所以 CVDate 也不再需要了。转换一个表达式成为 Date,再赋值给一个 Variant,也可以达到同样的效果。也可以使用这种技巧将其他真正的数据类型转换为对等的 Variant 子类型。

注意 CDec 函数不能返回独立的数据类型,而总是返回一个 Variant,它的值已经被转换为 Decimal 子类型。
--------------------编程问答-------------------- 我是想问一下  B=A AND &HFF&  这种形式有没有什么 具体的类型转换 的规则。 --------------------编程问答--------------------
引用 8 楼 haodadagm 的回复:
我是想问一下 B=A AND &HFF& 这种形式有没有什么 具体的类型转换 的规则。


具体规则要看每个数据类型占用的字节数,要看转换函数的功能,这个书上和msdn都有,要系统学习 --------------------编程问答-------------------- 你的意图是什么?感觉你没有表达清楚你的最终目的 --------------------编程问答--------------------
引用 8 楼 haodadagm 的回复:
我是想问一下 B=A AND &HFF& 这种形式有没有什么 具体的类型转换 的规则。

字节空间占用多的类型,可以隐式接受字节空间占用少的类型,实现自动转换。
反之不行,就需要显式转换。 --------------------编程问答-------------------- 能转,但未必会是你想要的结果,结果未必正确
http://www.programbbs.com/doc/200.htm VB中各种数据类型转换函数
--------------------编程问答-------------------- B=A AND &HFF&表示A的值与&HFF进行罗辑与,即取4字节的长整型数值A的最低1个字节的值。至于为什么是取最低字节的值,自己找一下计算机基础书籍,看看位运算就明白了。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 13 楼 lyserver 的回复:
B=A AND &HFF&表示A的值与&HFF进行罗辑与,即取4字节的长整型数值A的最低1个字节的值。至于为什么是取最低字节的值,自己找一下计算机基础书籍,看看位运算就明白了。


表面看 这个语句  B=A AND &HFF&  是不能执行的, 中间有隐含的转换,这些隐含的转换有没有明确的 资料 说明 是 遵循什么规则的。
--------------------编程问答-------------------- And 运算符
      

用来对两个表达式进行逻辑连接。

语法

result = expression1 And expression2

And 运算符的语法具有以下几个部分:

部分 描述 
result 必需的;任何数值变量。 
expression1 必需的;任何表达式。 
expression2 必需的;任何表达式。 


说明

如果两个表达式的值都是 True,则 result 是 True。如果其中一个表达式的值是 False,则 result 是 False。下列表格说明如何确定 result:

如果 expression1 为 且 expression2 为 则 result 为 
True True True 
True False False 
True Null Null 
False True False 
False False False 
False Null False 
Null True Null 
Null False False 
Null Null Null 


And 运算符还对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:

如果在 expression1 的位为 且在 expression2 中的位为 result 为 
0 0 0 
0 1 0 
1 0 0 
1 1 1 

--------------------编程问答--------------------
引用 16 楼 dbcontrols 的回复:
And 运算符
   

用来对两个表达式进行逻辑连接。

语法

result = expression1 And expression2

And 运算符的语法具有以下几个部分:

部分 描述 
result 必需的;任何数值变量。 
expression1 必需的;任何表达式。 
expression2 必需的;任何表达式。 


说明

如果两个表达式……


你就是共产党所谓的专家。

--------------------编程问答-------------------- 何出此言?
引用 17 楼 haodadagm 的回复:
引用 16 楼 dbcontrols 的回复:
And 运算符


你就是共产党所谓的专家。
--------------------编程问答-------------------- --------------------编程问答-------------------- 取低位字节。
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,