搜档网
当前位置:搜档网 › Oracle 数据库中long,lob类型的区别及转换

Oracle 数据库中long,lob类型的区别及转换

Oracle 数据库中long,lob类型的区别及转换
Oracle 数据库中long,lob类型的区别及转换

Oracle 数据库中long,lob类型的区别及转换

?字符类:

LONG:可变长的字符串数据,最长2G,LONG具有V ARCHAR2列的特性,可以存储长文本,一个表中最多一个LONG列

?二进制类:

LONG RAW:可变长二进制数据,最长2G

?大对象类:

CLOB:用来存储单字节的字符数据

NCLOB:用来存储多字节的字符数据

BLOB:用于存储二进制数据

BFILE:存储在文件中的二进制数据,这个文件中的数据只能被只读访。但该文件不包含在数据库内。

CLOB,NCLOB,BLOB都是内部的LOB类型,最长4G,没有LONG只能有一列的限制,对于保存图片、文本文件、Word文件,用BLOB最好,LONG RAW也不错,但Long是oracle将要废弃的类型,因此建议用LOB。

对于包含long数据类型的表t1,不能用“create table t2 as select * from t1;”的方式予以复制,会报“非法使用long类型”的错误:

SQL>create table t1(myid number, mylong long);

SQL(c3prd)>create table t2 as select * from t1;

create table t2 as select * from t1

*

ERROR at line 1:

ORA-00997: illegal use of LONG datatype

解决的方法有:

1)将long类型先转换成clob类型,再用上述方法复制

SQL(c3prd)>create table t2 as select myid,to_lob(mylong) mylob from t1;

Table created.

SQL(c3prd)>desc t2

Name Null? Type

----------------------------------------------------- -------- ------------------------------------

MYID NUMBER

MYLOB CLOB

SQL(c3prd)>create table t3 as select * from t2;

Table created.

SQL(c3prd)>desc t3

Name Null? Type

----------------------------------------------------- -------- ------------------------------------

MYID NUMBER

MYLOB CLOB

2)用PL/SQL的方法

declare

test_type long;

begin

select mylong into test_type from t1;

insert into t2(mylong) values(test_type);

commit;

end;

/

3)用sqlplus的copy命令

SQL(c3prd)>create table t4(myid number, mylong long);

Table created.

SQL(c3prd)>insert into t4 select * from t1;

insert into t4 select * from t1

*

ERROR at line 1:

ORA-00997: illegal use of LONG datatype

SQL(c3prd)>copy from scott/tiger@c3prd insert t4(myid,mylong) using select * from t1;

Array fetch/bind size is 15. (arraysize is 15)

Will commit when done. (copycommit is 0)

Maximum long size is 10000. (long is 10000)

0 rows selected from atcdba@c3prd.

0 rows inserted into T4.

0 rows committed into T4 at DEFAULT HOST connection.

C语言中的强制类型转换运算

C语言中的强制类型转换运算 C语言中的强制类型转换是通过类型转换运算来实现的。 其一般形式为: (类型说明符)(表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。 例如: (float)a 把a转换为实型 (int)(x+y)把x+y的结果转换为整形 在使用强制转换时应注意以下问题: 1)类型说明符和表达式都必须加括号(单个变量可以不加括号),如果把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。 2)无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性的转换,而不改变数据说明时对该变量定义的类型。 【例1】 #include int main (void) { float f = 3.14; printf("(int)f = %d,f = %.2f\n",(int)f,f); return 0; } 本例表明,f虽强制转为int型,但只在运算中起作用,是临时的,而f本身的类型并不改变。因此,(int)f的值为5(删去了小数)而f的值仍为5.75. 1、求余运算符(模运算符)“%”:双目运算,具有左结合性。要求参与运算的量均为整型。求余运算的结果等于两数相除后的余数。 #include int main (void) { printf(" %d\n",110%3);

return 0; } 本例输出110除以3所得的余数2。 2、算数表达式和运算符的优先级和结合性 表达式是由常量、变量、函数和运算符组合起来的式子。一个表达式有一个值及其类型,他们等于计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行。单个的常量、变量、函数可以看作是表达式的特例。 算数表达式是由算术运算符和括号连接起来的式子。 算数表达式:用算数运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。 以下是算数表达式的例子: a+b; (a*2)/c; (x+r)*8-(a+b)/7; ++I; Sin(x)+sin(y); (++i)-(j++)+(k--); 运算符的优先级:C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。 运算符的结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z,则先执行x-y运算,然后再执行+z运算。这是左结合性。右结合性最典型的是赋值运算符。如x=y=z. 3、强制类型转换运算符 其一般形式为: (类型说明符)(表达式)

常用数据类型转换使用详解

VC常用数据类型使用转换详解 CString ,BSTR ,LPCTSTR之间关系和区别 CString是一个动态TCHAR数组,BSTR是一种专有格式的字符串(需要用系统提供的函数来操纵,LPCTSTR只是一个常量的TCHAR指针。 CString 是一个完全独立的类,动态的TCHAR数组,封装了 + 等操作符和字符串操作方法。typedef OLECHAR FAR* BSTR; typedef const char * LPCTSTR; vc++中各种字符串的表示法 首先char* 是指向ANSI字符数组的指针,其中每个字符占据8位(有效数据是除掉最高位的其他7位),这里保持了与传统的C,C++的兼容。 LP的含义是长指针(long pointer)。LPSTR是一个指向以‘/0’结尾的ANSI字符数组的指针,与char*可以互换使用,在win32中较多地使用LPSTR。 而LPCSTR中增加的‘C’的含义是“CONSTANT”(常量),表明这种数据类型的实例不能被使用它的API函数改变,除此之外,它与LPSTR是等同的。 1.LP表示长指针,在win16下有长指针(LP)和短指针(P)的区别,而在win32下是没有区别的,都是32位.所以这里的LP和P是等价的. 2.C表示const 3.T是什么东西呢,我们知道TCHAR在采用Unicode方式编译时是wchar_t,在普通时编译成char. 为了满足程序代码国际化的需要,业界推出了Unicode标准,它提供了一种简单和一致的表达字符串的方法,所有字符中的字节都是16位的值,其数量也可以满足差不多世界上所有书面语言字符的编码需求,开发程序时使用Unicode(类型为wchar_t)是一种被鼓励的做法。 LPWSTR与LPCWSTR由此产生,它们的含义类似于LPSTR与LPCSTR,只是字符数据是16位的wchar_t而不是char。 然后为了实现两种编码的通用,提出了TCHAR的定义: 如果定义_UNICODE,声明如下: typedef wchar_t TCHAR; 如果没有定义_UNICODE,则声明如下: typedef char TCHAR; LPTSTR和LPCTSTR中的含义就是每个字符是这样的TCHAR。 CString类中的字符就是被声明为TCHAR类型的,它提供了一个封装好的类供用户方便地使用。

Step7-数据类型详细说明总结汇总

STEP7中的基本数据类型 ⑴位(BOOL) 位数据的数据类型为BOOL(布尔)型,在软件编程中BOOL变量的值1和0常用英语词TURE(真)和FALSE(假)来表示,对应二进制数中的“1”和“0”,常用于开关量的逻辑运算,存储空间为1位。 ⑵字节(BYTE) 字节数据长度为8位,数据格式为B#16#,B代表BYTE,表示数据长度为一个字节(8位),#16#表示十六进制,取值围为B#16#0~B#16#FF。 ⑶字(WORD) 字数据长度为16位,这种数据可采用4种方法进行描述。 二进制:二进制的格式为2#,如2#101,取值围为2#0~2#1111_1111_1111_1111,书写时每4位可用下划线隔开,也可直接表示为2#1。 十六进制:十六进制的格式为W#16#,W代表WORD,表示数据长度为16位,#16#表示十六进制,数据取值围为W#16#0~W#16#FFFF。 BCD码:BCD码的格式为C#,取值围为C#0~C#999。BCD码是用4位二进制表示1位十进制数,4位二进制中的0000~1001组合分别表示十进制中的0~9,4位二进制中的1010~1111组合放弃不用。BCD码的最高4位用来表示符号,十六位BCD码的取值围为-999~+999。在STEP7的数据格式中,BCD码的取值只取正值,与最高4位的符号无关。 无符号十进制数:无符号十进制数的格式为B#(×,×),取值围为B#(0,0)~B#(255,255),无符号十进制数是用十进制的0~255对应二进制数中的0000_0000~ 1111_1111(8位),16位二进制数就需要两个0~255的数来表示,例如: B#(12,254)=2#0000_1100_1111_1110 12 254 上面4种数据都是描述一个长度位16位的二进制数,无论你使用哪种方式都可以。例如,如果想得到二进制数00111,可以使用2#0000_1001_1000_0111,也可以使用W#16#987,还可以使用C#987或者B#(9,135)。在STEP7中,比较常用的是十六进制,即W#16#这种格式。 ⑷双字(DOUBLE WORD) 数据长度为32位,双字的数据格式与字的数据格式相同,也有4种方式,分别为: 二进制:取值围为2#0~2#1111_1111_1111_1111_1111_1111_1111_1111。 十六进制:取值围为DW#16#0~DW#16#FFFF_FFFF。 BCD码:取值围为C#0~C#9999999。 无符号十进制数:取值围为B#(0,0,0,0)~B#(255,255,255,255)。 ⑸整数(INT) 整数数据类型长度为16位,数据格式为带符号十进制数,16位中最高为符号位。正整数是以原码格式进行存储的,如+786,对应的二进制码为2#0000_0011_0001_0010,而负整数则表示为正整数的二进制补码,即对应正整数的二进制码取反后加1,例如负整数-786,对应的二进制码为2#1111_1100_1110_1110。将负零(1000_0000_0000_0000)定义为-32768因此取值围为-32768~32767。0表示正,1表示负。 ⑹双整数(DOUBLE INT) 双整数的数据类型长度为32位,数据格式为带符号十进制数,用L#表示双整数。双整数的二进制码与整数的换算方式一致,其取值围为L#-2147483648~L#2147483647。 ⑺实数(REAL也叫浮点数Float) 实数的数据类型长度为32位,是以IEEE浮点数格式转换为二进制数存储的,其取值围为±3.402823e+38~±1.1755494e-38。 实数用1.m×2E例如123.4可表示为1.234×102。 式中:指数E=e-127(1≤e≤254)为8位整数 符号位(S):S=0为正值S=1为负值 规定尾数的整数部分总是为1,只保留尾数的小数部分m(0~22位)

强制类型转换及指针本质

强制类型转换类型的本质指针的本质函数指针 昨天给朋友讲了 3个问题, A〉什么是函数指针,本质是?指针的本质? B〉什么是类型,类型的本质是? C〉什么是强制类型转换,本质是? 作者张世光亿通科技软件部 060913 QQ:87895224 MSN:Z_55@https://www.sodocs.net/doc/939957280.html, A〉什么是函数指针,本质是?指针的本质? 如 void fun(); //函数声明 void (*ptrfun)();//函数指针变量ptrfun 的声明,表明ptrfun这个指针指向一个 void fun()函数类型的函数地址。 〉函数的名字代表函数的地址; 所以,可以这样 ptrfun =fun ;//给ptrfun赋值。此时,ptrfun 就是 fun 函数的别名; 在需要调用 fun()的地方,可以这样写 (*ptrfun)(); //等同于 fun(); //这就是别名的意义。 指针的本质是一个固定长度(32位系统上是4个byte)的空间中放置的内容是一个内存地址。 而指针类型的本质就是对这个地址的解释方式。不同的指针类型,对即使相同的内存地址的解释是不同的,受影响的空间大小也不同。受影响的空间的大小等于sizeof(类型)。 如 short i=0x1234; short * psort = &i; char *pchar = &i; //此时 pshort ==pchar;即指向了同一个地址; 那么 (*pshort) 和 (*pchar) 的值各是什么? 假设 sizeof(short)==2 sizeof(char)==1 假如内存中这样: ---地址 0x1000-- | 0x34 | ---------------- | 0x12 | ---------------- 那么,psort==0x1000 ,同时,pchar==0x1000 ; 那么,(*psort) 代表是地址0x1000 和 0x1001 这两个字节的内容; <-----由其类型决定 (*pchar)代表地址0x1000 这一个字节的内容; <<-----由其类型决定

JAVA的各种变量类型的转换

JAVA的各种变量类型的转换 1 如何将字串 String 转换成整数 int? A. 有两个方法: 1).int i = Integer.parseInt([String]); i = Integer.parseInt([String],[int radix]); 2). int i = Integer.valueOf(my_str).intValue(); 注: 字串转成 Double, Float, Long 的方法大同小异. 2 如何将整数 int 转换成字串 String ? A. 有叁种方法: 1.) String s = String.valueOf(i); 2.) String s = Integer.toString(i); 3.) String s = "" + i; 注: Double, Float, Long 转成字串的方法大同小异. java的各种变量类型的转换 integer to String : int i = 42; String str = Integer.toString(i); String str = "" + i double to String : String str = Double.toString(i); long to String : String str = Long.toString(l); float to String : String str = Float.toString(f); String to integer : str = "25";

int i = Integer.valueOf(str).intValue(); int i = Integer.parseInt(str); String to double : double d = Double.valueOf(str).doubleValue(); String to long : long l = Long.valueOf(str).longValue(); long l = Long.parseLong(str); String to float : float f = Float.valueOf(str).floatValue(); decimal to binary : int i = 42; String binstr = Integer.toBinaryString(i); decimal to hexadecimal : int i = 42; String hexstr = Integer.toString(i, 16); String hexstr = Integer.toHexString(i); hexadecimal (String) to integer : int i = Integer.valueOf("B8DA3",16).intValue(); int i = Integer.parseInt("B8DA3", 16); ASCII code to String int i = 64; String aChar = new Character((char)i).toString(); integer to ASCII code (byte) char c = 'A'; int i = (int) c; To extract Ascii codes from a Strin String test = "ABCD"; for ( int i = 0; i < test.length(); ++i ) {

C++强制类型转换

关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。 static_cast 用法:static_cast < type-id > ( expression ) 该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法: ?用于类层次结构中基类和子类之间指针或引用的转换。进行上行转换(把子类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成子类表示)时,由于没有动态类型检查,所以是不安全的。 ?用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。 ?把空指针转换成目标类型的空指针。 ?把任何类型的表达式转换成void类型。 注意:static_cast不能转换掉expression的const、volitale、或者__unaligned属性。 dynamic_cast 用法:dynamic_cast < type-id > ( expression ) 该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void *;如果type-id是类指针类型,那么expression也必须是一个指针,如果ty pe-id是一个引用,那么expression也必须是一个引用。 dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。

编写程序,将long型数据987654转换为字符串,将十进制数365转换为十六进制数表示的字符串

【实验内容】 编写程序,将long型数据987654转换为字符串,将十进制数365转换为十六进制数表示的字符串。【程序清单附件】 public class Ex17 { public static void main(String[] args) { long num=987654L; int i=365; System.out.println("Long类型转换为String:"+String.valueOf(num)); String HexI=DtoX(i); System.out.println(HexI); } //转换函数 public static String DtoX(int d) { String x=""; if(d<16){ x=change(d); } else{ int c; int s=0; int n=d; while(n>=16){ s++; n=n/16;

} String [] m=new String[s]; int i=0; do{ c=d/16; //判断是否大于10,如果大于10,则转换为A-F的格式m[i++]=change(d%16); d=c; }while(c>=16); x=change(d); for(int j=m.length-1;j>=0;j--){ x+=m[j]; } } return x; } //判断是否为10-15之间的数,如果是则进行转换 public static String change(int d){ String x=""; switch(d){ case 10: x="A"; break; case 11: x="B";

C语言中数据类型

C语言中数据类型(整形,浮点型,字符型,无值型)2007年04月19日星期四上午11:29整型(int) 一、整型数说明 加上不同的修饰符, 整型数有以下几种类型; signed short int 有符号短整型数说明。简写为short或int, 字长为2字节共16位二进制数, 数的范围是-32768~32767。 signed long int 有符号长整型数说明。简写为long, 字长为4字节共32位二进制数, 数的范围是-2147483648~2147483647。 unsigned short int 无符号短整型数说明。简写为unsigned int, 字长为2字节共16位二进制数, 数的范围是0~65535。 unsigned long int 无符号长整型数说明。简写为unsigned long, 字长为4字节共32位二进制数, 数的范围是0~4294967295。 二、整型变量定义 可以用下列语句定义整型变量 int a, b; /*a、b被定义为有符号短整型变量*/ unsigned long c; /*c被定义为无符号长整型变量*/ 三、整型常数表示 按不同的进制区分, 整型常数有三种表示方法: 十进制数: 以非0开始的数 如:220, -560, 45900 八进制数: 以0开始的数 如:06; 0106, 05788 十六进制数:以0X或0x开始的数 如:0X0D, 0XFF, 0x4e 另外, 可在整型常数后添加一个"L"或"l"字母表示该数为长整型数, 如22L,0773L, 0Xae4l。 浮点型(float) 一、浮点数说明 Turbo C中有以下两种类型的浮点数: float 单浮点数。字长为4 个字节共32 位二进制数, 数的范围是3.4x10-38E~3.4x10+38E。double 双浮点数。字长为8个字节共64 位二进制数, 数的范围是1.7x10-308E~1.7x10+308E。 说明: 浮点数均为有符号浮点数, 没有无符号浮点数。 二、浮点型变量定义 可以用下列语句定义浮点型变量: float a, f; /*a, f被定义为单浮点型变量*/ double b; /*b被定义为双浮点型变量*/

全国计算机等级考试二级C语言真题题库3+2015年9月

全国计算机等级考试二级C语言真题题库3 2015年9月 (总分:43.00,做题时间:120分钟) 一、选择题(每小题1分,共40分)(总题数:40,分数:40.00) 1.下列叙述中正确的是()。 (分数:1.00) A.程序可以作为算法的一种表达方式√ B.算法的有穷性是指算法的规模不能太大 C.算法的复杂度用于衡量算法的控制结构 D.算法的效率与数据的存储结构无关 解析:[解析]算法的有穷性是指操作步骤有限且能在有限时间内完成,如果一个算法执行耗费的时间太长,即使最终得出了正确结果,也是没有意义的,故B选项错误。一个算法复杂度的高低体现在运行该算法所需要的计算机资源的多少,故C选项错误。算法的效率是指算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量,这就与算法本身设计的优劣以及具体的编程实现有关,数据的存储结构会极大的影响程序的执行时间,故D选项错误。算法在实现时需要用具体的程序设计语言来实现,所以程序可以作为实现算法的一种表达方式。故选A选项。 2.某循环队列的存储空间为Q(1:m),初始状态为front=rear=m。现经过一系列的入队操作和退队操作后,front=m-1,rear=m,则该循环队列中的元素个数为()。 (分数:1.00) A.m-1 B.1 √ C.m D.0 解析:[解析]循环队列长度为m,由初始状态为front=rear=m可知此时循环队列为空。入队运算时,首先队尾指针(rear)进1(即rear+1),然后在rear指针指向的位置插入新元素。特别的,当队尾指针rear =m+1时,置rear=1。迟队运算时,排头指针(front)进1(即front+1),然后删除front指针指向的位置上的元素,当排头指针front=m+1时,置front=1。从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素,则该循环队列中的元素个数为m-(m-1)=1。故选择B 选项。 3.能从任意一个节点开始没有重复地扫描到所有节点的数据结构是()。 (分数:1.00) A.循环链表√ B.双向链表 C.二叉链表 D.有序链表 解析:[解析]在单链表的第一个节点前增加一个表头节点,队头指针指向表头节点,最后一个节点的指针域的值由NULL改为指向表头节点,这样的链表称为循环链表。在循环链表中,只要指出表中任何一个节点的位置,就可以从它出发没有重复地扫描到表中其他所有的节点。双向链表与二叉链表都可以扫描到所有节点,但是会有重复。有序链表如果是单链表的情况下,不能扫描到所有节点。故A选项正确。 4.某棵树中共有25个节点,且只有度为3的节点和叶子节点,其中叶子节点有7个,则该树中度为3的节点数为()。 (分数:1.00) A.不存在这样的树√ B.7 C.8 D.6 解析:[解析]树是一种简单的非线性结构,直观地来看,树是以分支关系定义的层次结构。在树结构中,一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度。首先假设这样的树是存在

long 类型

(1)--函数定义begin—————— create or replace function getlong(p_tname in varchar2, p_cname in varchar2, p_rowid in rowid)return varchar2as l_cursor integer default dbms_sql.open_cursor; l_n number; l_long_val varchar2(4000); l_long_len number; l_buflen number:=4000; l_curpos number:=0; begin dbms_sql.parse(l_cursor, 'select '|| p_cname ||' from '|| p_tname || ' where rowid = :x', dbms_sql.native); dbms_sql.bind_variable(l_cursor,':x', p_rowid); dbms_sql.define_column_long(l_cursor,1); l_n := dbms_sql.execute(l_cursor); if(dbms_sql.fetch_rows(l_cursor)>0)then dbms_sql.column_value_long(l_cursor, 1, l_buflen, l_curpos, l_long_val, l_long_len); end if; dbms_sql.close_cursor(l_cursor); return l_long_val; end getlong; ------end———————————————— (2)--以下函数调用 select ROWNUM, a.*, getlong('workflow_requestlog','REMARK', a.rowid) aa from workflow_requestlog a --where ROWNUM <= 608 order by a.requestid asc

SQL数据库字段类型说明

SQL数据库字段类型说明

1)char、varchar、text和nchar、nvarchar、ntext char和varchar的长度都在1到8000之间,它们的区别在于char是定长字符数据,而varchar是变长字符数据。所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;而变长字符数据则不会以空格填充。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。 后面三种数据类型和前面的相比,从名称上看只是多了个字母n,它表示存储的是Unicode数据类型的字符。写过程序的朋友对Unicode应该很了解。字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较:nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar 最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。 (2)datetime和smalldatetime datetime:从1753年1月1日到9999年12月31日的日期和时间数据,精确到百分之三秒。 smalldatetime:从1900年1月1日到2079年6月6日的日期和时间数据,精确到分钟。 (3)bitint、int、smallint、tinyint和bit bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据。 int:从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整型数据。smallint:从-2^15(-32,768)到2^15-1(32,767)的整数数据。 tinyint:从0到255的整数数据。 bit:1或0的整数数据。 (4)decimal和numeric 这两种数据类型是等效的。都有两个参数:p(精度)和s(小数位数)。p指定小数点左边和右边可以存储的十进制数字的最大个数,p必须是从 1到38之间的值。s指定小数点右边可以存储的十进制数字的最大个数,s必须是从0到p 之间的值,默认小数位数是0。 (5)float和real float:从-1.79^308到1.79^308之间的浮点数字数据。 real:从-3.40^38到3.40^38之间的浮点数字数据。在SQL Server中,real 的同义词为float(24)。

int.parse和强制类型转换的区别

c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别收藏 以前经常为这几种数据类型转换方式而迷茫,这次为了彻底搞清它们之间的区别和优缺点,在网上查看了一些资料,并亲自验证了一下,在此写出来,一方面,为那些跟我有过相似经历的朋友们些许,另一方面,希望前辈们指导一下,看哪里有不合适的地方。 1 (int)变量名[强制类型转换]: 该转换方式主要用于数字类型转换,从int类型到long,float,double,decimal类型,可以使用隐式转换,但是从long类型到int类型就需要使用显式转换,也就是该数据类型转换方式,否则会产生编译错误。 该方式对于浮点数会做无条件舍去,失去精确度 当然,该方式也可以进行object到int得转换,但是,object的值要赋予int类型的值,否则会产生编译错误,而且object为null时也会出错。 最后切忌的一点,千万不要用来处理char类型到int类型的转换,否则传回的的值是ASCII代码,而并不是你想要的值。 2 int.Parse(string类型变量名) 该方式是将数字内容的字符串转为int类型,如果字符串内容为空或者null时,则抛出ArgumentNullException异常;如果字符串内容不是数字,则抛出FormatException异常;如果字符串内容所表示数字超出int类型可表示的范围,则抛出OverflowException异常。 使用该方法切忌的一点就是只能处理字符串内容,而且字符串内容只能在int类型可表示的范围之内。 3 int.TryParse(string s, out int result) 该方式也是将数字内容的字符串转为int类型,但是该方式比int.Parse优越的地方,就是它不会出现异常。如果转换成功返回true,如果转换失败返回false。很明显,最后一个参数为输出值,如果转换失败,输出值为0;如果转换成功,则输出相应的值。 4 Convert.ToInt32 该方式不仅可以将字符串转为int类型,还可以将其它类型的值转成int类型。变量若为object或string类型,当其值为null时,会传回0,不会造成程序错误,但是若此string类型的值为string.Empty,在转型成int时,仍会造成程序错误。 该方式对于浮点数会做四舍五入。 该方式同强制转换一样,不能用来处理char类型,否则传回的是ASCII代码。

数据类型

数据类型 标识符是用来标识源程序中某个对象的名字的,这些对象可以是语句、数据类型、函数、变量、数组等等。C语言是大小字敏感的一种高级语言,如果我们要定义一个定时器1,可以写做"Timer1",如果程序中有"TIMER1",那么这两个是完全不同定义的标识符。标识符由字符串,数字和下划线等组成,注意的是第一个字符必须是字母或下划线,如"1Timer"是错误的,编译时便会有错误提示。有些编译系统专用的标识符是以下划线开头,所以一般不要以下划线开头命名标识符。标识符在命名时应当简单,含义清晰,这样有助于阅读理解程序。在C51编译器中,只支持标识符的前32位为有效标识,一般情况下也足够用了,除非你要写天书:P。 关键字则是编程语言保留的特殊标识符,它们具有固定名称和含义,在程序编写中不允许标识符与关键资亦同。在KEIL uVision2中的关键字除了有ANSI C标准的3 2个关键字外还根据51单片机的特点扩展了相关的关键字。其实在KEIL uVision2的文本编辑器中编写C程序,系统可以把保留字以不同颜色显示,缺省颜色为天蓝色。(标准和扩展关键字请看附录一中的附表1-1和附表1-2) 先看表4-1,表中列出了KEIL uVision2 C51编译器所支持的数据类型。在标准C语言中基本的数据类型为char,int,short,long,float和double,而在C51编译器中int和s hort相同,float和double相同,这里就不列出说明了。下面来看看它们的具体定义:数据类型长度值域 unsigned char 单字节0~255 signed char 单字节-128~+127 unsigned int 双字节0~65535 signed int 双字节-32768~+32767

指针强制转换

1、指针类型转换请使用static_cast、dynamic_cast等操作 2、指针变量(不管那种指针),大小都是四个字节,内容就是指向的对象的首地址。不同类型指针不同点就是对首地址之后的那块内存会做不同解释。 建议你看看《Inside C++ Object Model》里面关于指针的内容,里面有清晰的说明 int * pi = new int; pi 指向了一块内存的首地址,这块内存应该有sizeof(int)个字节, 由于pi是int *类型,所以通过pi进行的操作,编译器都认为pi的内容是一个有sizeof(int)个字节的int 型变量的首地址,所以*pi = 4,遇到这样的操作,编译器产生的代码就是把4这个数付到pi所指的四个字节里。 char * pc = (char *)pc; //建议这样写char * pc = static_cast (pc); *pc = '4 '; 由于pc是char *类型,所以通过pc进行的操作,编译器都认为pc的内容是一个有sizeof(char)个字节的char型变量的首地址,所以*pc = '4 ',遇到这样的操作,编译器产生的代码就是把4这个字符付到pc所指的第一个字节里。虽然,pc实际指向的是int型的变量,有4个字节。 改变指针的类型,解引用操作的时候会影响到所指向的地址内容(类型所占的字节数可能不同,还有高位是符号位或是数据位)解析,不会发生数据丢失 未必!设想下面三个类: class A { public: int m_nA; A():m_nA(1){} public: A* GetA(){ return this; } }; class B { public: int m_nB; B():m_nB(2){} }; class C : public A, public B { public:

数据库设计基本数据类型说明

一. 基本类型 数据库设计,在数据库设计文档中,统一用内存类型作为数据库库设计文档,至于内存类型和数据库之间的对应关系统一由工具来处理 数据库设计文档类型 现用 原用 Orcal 内存类型 size SQL Server Oracle varchar varchar VARCHAR2 String 需要填写长度 4000以内 varchar VARCHAR2 Smallint 2 smallint NUMBER(2,0) bigint Integer 4 int NUMBER(4,0) bit decimal NUMBER Boolean tinyint NUMBER(1,0) float Float 需要填写长度 float NUMBER() int NUMBERIC money Currency 默认4位 money NUMBER(19,4) real DateTime datetime date smallint Blob image BLOB tinyint Guid Unique.. VARCHAR2(40) smallmoney Int64 8 Int64 NUMBER(8,0) numeric datetime datetime date SmallDatetime varchar(40) uniqueidentifier varchar2(40) image image BLOB S U N L I G H T

二.表结构通用字段 类别字段说明 台帐单据objid 单据ID EnterCode 企业Code BrandCode 品牌Code 其他业务字 段 静态单据主单 objid 单据ID Code 单据编号 EnterCode 企业Code BrandCode 品牌Code ModifyCode 最近更新人Code ModifyTime 更新时间 Status 状态 Verinfo 版本号 业务字段 静态单据日志表 objid 单据ID parentid 父单据 LogData 更新日志 ModifyCode 最近更新人 Code S U N L I G H T

C语言数据类型及转换

C语言的数据类型 C语言提供的数据结构,是以数据类型形式出现的。具体分类如下: 1.基本类型 分为整型、实型(又称浮点型)、字符型和枚举型四种。 2.构造类型 分为数组类型、结构类型和共用类型三种。 3.指针类型。在第9章中介绍。 4.空类型 C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。 本章将介绍基本类型中的整型、实型和字符型三种数据。 2.3 常量和变量 2.3.1 常量 1.常量的概念 在程序运行过程中,其值不能被改变的量称为常量。 2.常量的分类 (1)整型常量 (2)实型常量 (3)字符常量。 (4)符号常量。 常量的类型,可通过书写形式来判别。 2.3.2 变量 1.变量的概念 在程序运行过程中,其值可以被改变的量称为变量。 2.变量的两个要素 (1)变量名。每个变量都必须有一个名字──变量名,变量命名遵循标识符命名规则。(2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。 3.标识符命名规则 (1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。 (2)有效长度:随系统而异,但至少前8个字符有效。如果超长,则超长部分被舍弃。 例如,由于student_name和student_number的前8个字符相同,有的系统认为这两个变量,是一回事而不加区别。 在TC V2.0中,变量名(标识符)的有效长度为1~32个字符,缺省值为32。 (3)C语言的关键字不能用作变量名。 注意:C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。 习惯上,变量名和函数名中的英文字母用小写,以增加可读性。 思考题:在C语言中,变量名total与变量名TOTAL、ToTaL、tOtAl等是同一个变量吗?标识符命名的良好习惯──见名知意: 所谓“见名知意”是指,通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、sex/xb(性别)、age/nl(年龄)、salary/gz(工资)。 4.变量的定义与初始化 在C语言中,要求对所有用到的变量,必须先定义、后使用;且称在定义变量的同时进行赋初值的操作为变量初始化。

void指针小结

C/C++语言void及void指针深层探索 1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义: 这行语句编译时会出错,提示“illegal use of type 'void'”。不过,即使void a的编译不会出错,它也没有任何实际意义。 void真正发挥的作用在于: (1)对函数返回的限定; (2)对函数参数的限定。 我们将在第三节对以上二点进行具体说明。 众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不同的数据类型,则必须使用强制类型转换运算符把赋值运算符右边的指针类型转换为左边指针的类型。 例如: 其中p1 = p2语句会编译出错,提示“'=' : cannot convert from 'int *' to 'float *'”,必须改为: 而void *则不同,任何类型的指针都可以直接赋值给它,无需进行强制类型转换: 但这并不意味着,void *也可以无需强制类型转换地赋给其它类型的指针。因为“无类型”可以包容“有类型”,而“有类型”则不能包容“无类型”。道理很简单,我们可以说“男人和女人都是人”,但不能说“人是男人”或者“人是女人”。下面的语句编译出错: 提示“'=' : cannot convert from 'void *' to 'int *'”。 3.void的使用

C语言类型强制转换

C语言类型强制转换 本篇主要介绍 C语言类型强制转换。 强制类型转换是通过类型转换运算来实现的。其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。 自动转换是在源类型和目标类型兼容以及目标类型广于源类型时发生一个类型到另一类的转换。例如: (float) a 把a转换为实型(int)(x+y) 把x+y的结果转换为整型在使用强制转换时应注意以下问题: 1.类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y) 写成(int)x+y则成了把x转换成int型之后再与y相加了。 2.无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进 行的临时性转换,而不改变数据说明时对该变量定义的类型。 例1: main() { float f=5.75; printf("(int)f=%d,f=%f\n",(int)f,f); } f<--5.75 将float f强制转换成int f float f=5.75;printf("(int)f=%d,f=%f\n",(int)f,f); 本例表明,f虽强制转为int 型,但只在运算中起作用,是临时的,而f本身的类型并不改变。因此,(int)f 的值为 5(删去了小数)而f的值仍为5.75。 例2:比如我们可以(int)'A',这样转换后的结果为A的ASCII码数值,因为那块内存本来就存的那个数,只是换个形式使用而已。知道上面的原则,我们 可以对任何数据类型进行转换,但是转换的结果可能不是你想像的结果,举例 (int)'9'的结果为多少?不是9而是0x39。来个高深点的printf("%d",'12'); 的输出是什么?正确答案是12594,因为printf("%d",'12'),打印的是存储12 的内存地址上的内容,即ASCII码值2存储在低位,1储在高位地址,0x32就是2 的ASCII码,0x31就是1的ASCII码,所以是0x3132,转换成10进制就是12594!

相关主题