2.数据对象与运算

一、信息的存储方式

  1.计算机以8个连续的位(bit、比特)为一组,称为一个字节(B、byte)

    1 Kb = 1024 byte

     计算机中每个存储单元一般是一个字节,可存放8个二进制数

二、数据类型

  (一)整数类型

  1.C语言标准要求:(1)char < short <= int <= long

                           (2)char < short <= float <= double

  2.计算数据类型长度(字节数):sizeof(...)  (注意:sizeof属于运算符,不是函数)

  3.32位系统各整型数据长度:

数据类型 字节数 比特数 取值范围
int 4 32 -231 ~ 231 - 1
short 2 16 -215 ~ 215 - 1
long 4 32 -231 ~ 231 - 1
char 1 16 -27 ~ 27 - 1

  4.32位系统无符号整型数据长度:

数据类型 字节数 比特数 取值范围
unsigned int 4 32 0 ~ 232 - 1
unsigned short 2 16 0 ~ 216 - 1
unsigned long 4 32 0 ~ 232 - 1

    (长度等于同类型整型数据)

  5.C99标准为C语言扩展了新的整数类型:long long

数据类型 字节数 比特数 取值范围
long long int 4 32 0 ~ 232 - 1
unsigned long long 2 16 0 ~ 216 - 1

    (输入、输出均使用"%lld")

  6.R进制:R称为数制的“基数”

               数制中每个固定位置所对应的单位值称为“权”

     快速计算:每一个八进制数相当于3位二进制数

                   每一个十六进制数相当于4位二进制数

  7.有符号整数存储方式:补码

     补码定义:正数补码即为其二进制形式

                   负数补码等于其绝对值的二进制形式,按位取反再加 1

     规律:正数补码最高位是0,负数补码最高位是1

     数据溢出:32767 + 1 == 32768

     注:存储方式:原码:最高位为符号位,0代表正数,1代表负数

                         反码:正数不变,负数逐位取反

                         补码:正数不变,负数逐位取反再 + 1

       采用补码的原因:方便进行运算,不必考虑符号位:(X + Y) == X + Y  (X - Y) == X - Y

(二)实数类型

  1.32位系统各整型数据长度:

数据类型 字节数 比特数 取值范围
float 4 32 -10-38 ~1038
double 8 64 -10-308 ~10308
long double 16 128 -10-4932 ~104932

  2.控制字符:

函数 float double long double
scanf %f %lf %Lf
printf %f %f %Lf

     (%e、%g同理)

  3.IEEE制定标准:

    单精度:SE E...E FF...F  双精度:SEE...E   F F...F

        01......8 9....31      01....11 12....63

   S:符号位  E:指数位  F:小数位

     数值:(-1)S * 2E - 127 * (1.F)

  (三)字符类型

  1.双重属性:整数属性(可以使用unsigned修饰符),字符属性(‘A‘ = 65, ‘a‘ = 97)

    小写 = 大写 + 32

三、常量

  常量分为字面常量(直接常量),符号常量(定义:宏命令:#define PI 3.14)

(一)整型常量

  1.以0开头表示它为八进制数

     以0x开头表示它为十六进制数

(二)实型常量

  1.如果小数点左边或右边为0,则此0可以省略(例:.124 == 0.124  124. = 124.0)

  2.指数形式中,字母e可写为E,指数部分必须是一个整数

     规范化形式:实数部分小数点左侧仅有1位非零数字

(三)字符常量

  1.常用转义字符:

     \a 响铃  \b 退格  \t 水平tab键  \? 问号  \n 换行  \\ 反斜杠  \v 竖直tab键

四、变量

  1.命名规则:只能包含字母、数字、下划线

         第一个字符必须是字母或下划线

         不能使用关键字,变量名与大小写相关

       变量命名法:(1)全小写,单词间加下划线(主要用于UNIX)

          (2)骆驼命名法:第一个字母小写,以后每个单词第一个字母大写,例:myCar

          (3)匈牙利命名法:变量名前加数据类型字符,例:整型变量:iMyCar(多用于Windows)

          (4)帕斯卡命名法:首字母大写,例:UserName(常用于类的变量)

       常量命名法:全大写,例:MAX_PARAMETER_COUNT

五、运算符和表达式

  1.运算符优先性


优先级


运算符


名称或含义


使用形式


结合方向


说明


1


[]


数组下标


数组名[常量表达式]


左到右

 

()


圆括号


(表达式)/函数名(形参表)

 

.


成员选择(对象)


对象.成员名

 

->


成员选择(指针)


对象指针->成员名

 

2


-


负号运算符


-表达式


右到左


单目运算符


(类型)


强制类型转换


(数据类型)表达式

 

++


自增运算符


++变量名/变量名++


单目运算符


--


自减运算符


--变量名/变量名--


单目运算符


*


取值运算符


*指针变量


单目运算符


&


取地址运算符


&变量名


单目运算符


!


逻辑非运算符


!表达式


单目运算符


~


按位取反运算符


~表达式


单目运算符


sizeof


长度运算符


sizeof(表达式)

 

3


/



表达式/表达式


左到右


双目运算符


*



表达式*表达式


双目运算符


%


余数(取模)


整型表达式/整型表达式


双目运算符


4


+



表达式+表达式


左到右


双目运算符


-



表达式-表达式


双目运算符


5


<<


左移


变量<<表达式


左到右


双目运算符


>>


右移


变量>>表达式


双目运算符


6


>


大于


表达式>表达式


左到右


双目运算符


>=


大于等于


表达式>=表达式


双目运算符


<


小于


表达式<表达式


双目运算符


<=


小于等于


表达式<=表达式


双目运算符


7


==


等于


表达式==表达式


左到右


双目运算符


!=


不等于


表达式!= 表达式


双目运算符


8


&


按位与


表达式&表达式


左到右


双目运算符


9


^


按位异或


表达式^表达式


左到右


双目运算符


10


|


按位或


表达式|表达式


左到右


双目运算符


11


&&


逻辑与


表达式&&表达式


左到右


双目运算符


12


||


逻辑或


表达式||表达式


左到右


双目运算符


13


?:


条件运算符


表达式1? 表达式2: 表达式3


右到左


三目运算符


14


=


赋值运算符


变量=表达式


右到左

 

/=


除后赋值


变量/=表达式

 

*=


乘后赋值


变量*=表达式

 

%=


取模后赋值


变量%=表达式

 

+=


加后赋值


变量+=表达式

 

-=


减后赋值


变量-=表达式

 

<<=


左移后赋值


变量<<=表达式

 

>>=


右移后赋值


变量>>=表达式

 

&=


按位与后赋值


变量&=表达式

 

^=


按位异或后赋值


变量^=表达式

 

|=


按位或后赋值


变量|=表达式

 

15


,


逗号运算符


表达式,表达式,…


左到右


从左向右顺序运算

    说明:

    同一优先级的运算符,运算次序由结合方向所决定。

    简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

  2.运算符要点:(1)/ :若为两整数相除,结果仍为整数(小数部分直接舍去,不是四舍五入)

                            %:要求两边的运算对象均为整数

                      (2)++、--:j = ++i;  :先自加,后赋值

                 j = i++;  :先赋值,后自加

         (3)移位运算符

            左移:逻辑、算术左移      移位后补0:逻辑移位

            右移:算术右移         移位后补符号位:算术移位

            作用:增加运算效率(应用:左移n位 = 乘以2n

         (4)位运算符

            &:按位与  作用:清零、取出特定位

            | :按位或  作用:将某些位定为1

            ^:按位异或 作用:将某些位翻转

            ~:按位取反

            应用:不使用临时变量交换两数:

              a = a ^ b;  b = b ^ a;  a = a ^ b;

         (5)赋值运算符

            x = 5;

            y = (x == 5);    //y = 1;

            y = (x = 4);    //y = 4;

         (6)逗号运算符:  表达式1, 表达式2, ..., 表达式n

            从左至右依次执行,返回表达式n的值

  3.赋值转换:较长整型->较短整型:直接去掉多余的高端位

        实型->整型:舍弃小数部分

        整型->浮点:数值不变,但会存在精度问题

        高精度浮点->低精度浮点:会有精度损失

  4.运算转换:将“窄一点”转换为“宽一点”,以避免精度损失

时间: 2024-11-14 13:33:06

2.数据对象与运算的相关文章

跨库数据表的运算

文章出自http://c.raqsoft.com.cn/article/1536666621882?r=niu 1.    简单合并(FROM) 所谓跨库数据表,是指逻辑上同一张数据表被分别存储在不同数据库中.其原因有可能是因为数据量太大,放在一个数据库难以处理,也可能在业务上就需要将生产库和历史库分开.而不同的数据库,可能只是部署在不同的机器上的同种数据库,也可能是连类型都不同的数据库系统. 在面对跨库数据表,特别是数据库类型都不相同的情况时,数据库自带的工具往往就力所不及了,一般都需要寻找能

mysql跨库数据表的运算

跨库数据表的运算,一直都是一个说难不算太难,说简单却又不是很简单的.总之是一个麻烦的事.大量的.散布在不同数据库中的数据表们,明明感觉要把它们合并起来,再来个小小的计算,似乎也就那么回事……但真要做起来,需要这又忘了那的,却又不像仅仅就那么回事?        想要给这些小麻烦们,来一个快刀斩乱麻式的.嘁嚓咔嚓地一劳永逸的解决方案么?首先,你需要一把叫做集算器的宝刀(重点):然后,你可以再看看这篇算是买一赠一的秘传刀法(免费):最后,面向敌人们手起刀落……你就可以轻松愉快地去睡一个好觉了:跨库数

PHP面向对象之php数据对象(PDO)——图书查看管理

首先创建相关的有关的数据库:数据库的名字我用的是books表名用的是book(下面是完整的数据库,里面的img/img01.jpg是显示的图片的路径) CREATE DATABASE books DEFAULT CHARSET=utf8;USE books; CREATE TABLE book( b_id INT PRIMARY KEY AUTO_INCREMENT, b_name VARCHAR(100) NOT NULL UNIQUE, b_img VARCHAR(50) NOT NULL,

数据对象映射模式

定义:将对象和数据存储映射起来,对一个对象的操作会映射为数据存储的操作 综合应用实例:在代码中实现数据对象映射模式,我们将实现一个ORM类,将复杂的SQL语句映射成对象属性的操作,结合使用数据对象映射模式,工程模式,注册模式 $page = new Page();$page->index(); class Page{ function index() { $user = \IMooc\Factory::getUser(1); $user->name= 'fango0'; $this->t

数据对象存储优劣

工作中遇到问题分析记录,先直接抛问题. 现有三层业务 A, B, C 原始数据 A 层,存储着 基础数据对象 Map => a... size 不小于 1000, 随机抛出 一个 数据对象( a1) 底层数据 B 层, 捕获数据A层 抛出的对象 a1 后, 经过一系列 db 查询, 深度算法 计算 等处理, 生成 a1 对应的结果 b1.B层将数据抛出 业务 C 层, 捕获B 层 数据,进行业务处理. 那么,问题就来了.如果A层, 在一段时间内多次 抛出 对象 a1 . B 层 每次将要 消耗大

PHP 设计模式 笔记与总结(10)数据对象映射模式 2

[例2]数据对象映射模式结合[工厂模式]和[注册模式]的使用. 入口文件 index.php: <?php define('BASEDIR',__DIR__); //定义根目录常量 include BASEDIR.'/Common/Loader.php'; spl_autoload_register('\\Common\\Loader::autoload'); echo '<meta http-equiv="content-type" content="text/

Oracle---常用SQL语法和数据对象

1.INSERT  (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, ……) VALUES ( 值1, 值2, ……); INSERT INTO 表名(字段名1, 字段名2, ……)  SELECT 字段名1, 字段名2, …… FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个单引号''. 字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型XXX的对象时检测到循环引用。

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型 的对象时检测到循环引用. 异常信息(部分): System.Web.Services.Protocols.SoapException: 服务器无法处理请求. ---> System.InvalidOperationException: 生成 XML 文档时出错. ---> System.InvalidOperationException: 序列化类型 Web

fastjson 第三方jar和java各种数据对象相互转化

package com.saic.grape.utils; import java.util.Map; import com.meidusa.fastjson.JSON; import com.meidusa.fastjson.JSONObject; import com.saic.grape.entity.KeyValue; import com.saic.grape.entity.UserLogin; /** * Copyright (C), 2014-4-22, * @version 1.