总结归纳计算机编程中的各种数据类型,其表示形式和计算方法。重点关注类型转换、数值溢出和移位等操作。
数据类型
1.数字类型1.1 整数型(int)定义方式:如,phone_num=1371828137方法:加减乘除,地板除,取整,取余1.2 浮点型(float)
2.字符串类型(str)定义方式:在单引号,双引号,三单/双引号之间,但三单/双引号字符串可以换行
3.列表类型(list)定义:在[]中存任何数据类型的元素,这些元素以逗号隔开
4.字典类型(dict)定义方式:{}中以key:value的形式存储数据,key一般用来描述value的意义,所以key一般是字符串,但它可以是不可变数据类型;value可以是任何数据类型,以逗号隔开key:value
5.布尔类型(bool)定义:Ture/False注:0、None、空(空字符串,空列表,空字典),False的bool值为False。
6.用户交互
7.格式化输出
参考文献:https://www.cnblogs.com/bruce123/p/10796793.html
计算机中的类型转换在不同的编程系统中呈现不同,以下以C++为例进行说明:
一、在c++中的数据类型转换一般有以下几种情况:
1、将一种算术类型的值赋给另一种算术类型的变量时,c++将对值进行转换
2、表达式中包含不同的类型时,c++将对值进行转换
3、将参数传递给函数时,c++将对值进行转换
二、在进行数据类型转换的时候要注意几点:
1、将小的数据类型转化为大的数据类型,不会出现问题,一般只是转化后所占用的字节更多了,但是要将大的数据类型转化为小的数据类型的话,就会造成数据的丢失。
2、将较大的浮点数转化为较小的浮点数,如double转化为float ,这会造成精度(有效数位)降低,值可能超出目标类型的取值范围,在这种情况下,结果将是不确定的。
3、将浮点类型转换为整型,这会造成小数部分丢失,原来的值可能超出目标类型的取值范围,在这种情况下,结果将是不确定的。
4、当运算涉及到两种数据类型时,一般是较小的类型将被转换为较大的类型。
三、强制类型转换:
1、形式:a、(typeName) value (C语言的写法)b、value (typeName) (c++的写法)c、static_cast<> 可以将值从一种数值类型转换为另外一种数据类型,格式为: static_cast (value
四、总结:整型数据类型大小排序: bool , char , signed char, unsigned char, short , unsigned short , int , unsigned int ,long , unsigned long , long long , unsigned long long浮点数排序大小:float , double , long double
参考文献:https://www.cnblogs.com/1121518wo/p/11210591.html
关于溢出,以C语言中的整数溢出现象为例
c语言中存在两类整数算术运算,有符号运算和无符号运算。
在无符号运算里,没有了符号位,所以是没有溢出的概念的。所有的无符号运算都是以2的n次方为模。如果算术运算符的一个操作数是有符号书,另一个是无符号数,那么有符号数会被转换为无符号数(表示范围小的总是被转换为表示范围大的),那么溢出也不会发生。但是,当两个操作数都是有符号数时,溢出就有可能发生。而且溢出的结果是未定义的。当一个运算的结果发生溢出时,任何假设都是不安全的。例如,假定a和b是两个非负的整型变量(有符号),我们需要检查a+b是否溢出,一种想当然的方式是:if (a + b < 0) 溢出;
实际上,在现实世界里,这并不能正常运行。当a+b确实发生溢出时,所有关于结果如何的假设均不可靠。比如,在某些机器的cpu,加法运算将设置一个内部寄存器为四种状态:正,负,零和溢出。在这种机器上,c编译器完全有理由实现以上的例子,使得a+b返回的不是负,而是这个内存寄存器的溢出状态。显然,if的判断会失败。 一种正确的方式是将a和b都强制转换为无符号整数:if ( (unsigned)a + (unsigned)b > INT_MAX) 溢出;这里的int_max值为有符号整型的最大值。在一般的编译器里是一个预定义的常量。ANSI C在limits里定义了INT_MAX,值为2的31次方-1. 不需要用到无符号算数运算的另一种可行方法是:if (a > INT_MAX - b ) 溢出;
PS : 有符号数的最高位(31位)为符号位,最高位为0的时候,表示正,为1的时候表示负。运算时,符号位不参加运算,但是如果两个数相加,30位需要进1时,那么即表示溢出。
参考文献:https://blog.csdn.net/bichenggui/article/details/4734040
移位运算符包括左移"<<“和右移”>>"
左移运算符<<:
1.无符号语法格式:需要移位的数字<<移位的次数n运算规则:按二进制形式把所有数字向左移动相应的位数,高位移出(舍弃),低位的空位补0。相当于乘以2的n次方
2.有符号如果你左移有符号的数字,以至于符号位受影响,则结果是不确定的。
右移运算符>>:
1.无符号语法格式:需要移位的数字>>移位的次数n运算规则:按二进制形式把所有数字向右移动相应的位数,低位移出(舍弃),高位的空位补0。相当于除以2的n次方
2.有符号语法格式:需要移位的数字>>移位的次数n运算规则:按二进制形式把所有数字向右移动相应的位数,低位移出(舍弃),正数,高位的空位补0。负数,高位的空位补1。
参考文献:https://www.cnblogs.com/shrimp-can/p/5145351.html