基本数据类型与表达式

一、数据的储存

1.整型数据——占两个字节,范围[-32768 , 32768]

(1)原码:正数的符号用0,负数的符号用1,其余各位表示数值的绝对值。

(2)反码:正数为本身;负数,数值部分每位求反,符号位不变。

(3)补码:正数为本身,负数为其反码+1(计算机中以补码的表示数值)。

  ——总结:正数的原码,反码,补码相等

                   负数的反码为原码取反(符号位不变),补码为反码+1

   

 2.实型数据存储方式:符号位+阶码+尾数。例如:- 1.23e +02

 3.字符型数据 ——每个字符占用一个字节,存储ASCII码

二、基本数据类型

1.整型与整型常数

(1)整型变量分类 ——无符号(unsign)/有符号、长短

     

(2)整型常量 表达式

        ①十进制,②八进制,③十六进制(0x / 0X + 0~9,a~f / A~F)

  (3)整数类型 

        ①long型常数:123L/123l  ②unsigned型常数:123U /123u   ③unsigned long 型常数:123LU / 123lu

Tip:比长整型数还大的数要用实数表示。

2.字符型

(1)字符型常量:'a','0'(注意:单引号)

(2)ASCII字符集(256个)

 ——整型变量与字符变量的定义和赋值可以互换(在ASCII码的范围内)

(3)转义字符

         

 3.实型

(1)数据长度:

         单精度浮点型 —— float ——32位

         双精度浮点型 —— double ——64位

(2)数据精度 不等于 取值范围

 

 Tip:①不是所有的实数都能在计算机中精确表示;

       ②实型常量(浮点数)的类型都是 double

(3)实数的表示——浮点表示法(0.123)/ 科学计数法(1.2e-5)

三、数据的输入与输出

 1.整型数据的输入与输出

 (1)格式

       

 

 

 (2)指定整型数据的输出宽度:例如:%md,%5d(数据宽度为5)// 如果实际输出数小于宽度,用空格补上。

例题:

scanf("%o%d",&a,&b);
printf("%d %5d",a,b);

  输入:17 17

  输出:15      17

2.实型数据

(1)输出:float与double :都以%f(小数形式输出且保留6位小数),%e(指数形式即小数点前有且仅有一位非零数字)

(2)输入:

       ①float:使用%f,%e

       ②double:使用%lf%le(多一个限定词 l(long))

(3)控制输出格式:例如:%5.3f——输出宽度为5,小数部分 3 位,小数点 1 位

3.字符型

(1)使用scanf()和printf():格式控制说明为%c

(2)使用getchar()与putchar():每次仅输入输出一个字符

例题:

代码:

复制代码
#include <stdio.h>
int main ()
{
    char ch;
    ch = getchar();
    while(ch!='#'){
        if(ch>='A'&&ch<='Z'){
            ch=ch-'A'+'a';
        }else if(ch>='a'&&ch<='z'){
            ch=ch-'a'+'A';
        }
        putchar(ch);
        ch = getchar();
    }

    return 0;
}
复制代码

解析:'m' - 'a' + 'A'='M' ——ASCII中‘a'与’A‘为任意一个字母小写与大写间的数据差。

 

4.类型转换:(只是为了本次运算而进行的临时性转换)

(1)自动类型转换:参与运算量的类型不同,则先转换成同一类型,然后进行运算。

(2)强制类型转换:转换的是运算符,不是函数,例如 强制转换应写成(int)x,而不是int(x)

四、表达式

1.算术表达式

(1)优先级

 (2)结合方向:单目为从右向左,双目为从左向右。

 (3)注意:

① / :整数除整数得整数,且不会四舍五入,直接舍去小数部分。

          负整数结果的四舍五入没有规定,所以结果不确定。

          如果要精确的结果,可以把一个操作数转换为浮点数 。

②% :针对整型数据

           负数%没有规定符号

(4)++,--

①++i,--i :i=i+1;取i值为++n的值

②i++;i-- :取 i 值为表达式i++的值,再来 i=i+1

2.赋值表达式

3.关系表达式

4.逻辑表达式

(1) 优先级与结合方向:!(最高,右结合) && || (左结合)

(2)!a:如果a为真,!a为0()假,!a的值永远为0或1。

5.条件表达式:exp1?exp2:exp3——先判断exp1,真(非0)执行exp2,反之。

6.逗号表达式:从左向右,以最后一个为表达式的值

7.位运算

(1)运算符:

  ① ~ 按位取反 ②& 按位与(不同为0,同1为1,同0为0) ③^ 按位异或:相同取0,不同取1

  ④ | 按位或  ⑤移位运算符 << 左移,>>右移 (空出位置用0填补)

(2)操作数只为整型或字符型的数据以及其变体,运算时先将数据转化为二进制。

(3)异或的特殊操作:

  ①a^a=0 ②a^~a=二进制全是1 ③ ~(a~^a)=0

 

 

 

周结问题

1.以键盘输入^Z或遇到文件结束符时结束数据输入 的题型:

 ——输入停止以不等于EOF为标志 (不确定循环次数用while)

 ——用scanf()!=EOF 或者getchar()即可不用再调用输入函数

2.换行问题:

有些题会要求行末不能有多余换行,但是多个样例之间需要,这时候我们一般都是特判:如果不是最后一组样例,就输出换行,是最后一组就不换行。

\\如果无法确认最后一组,则判断第一组前面没有\n,后面每组前面都输出\n。即:除了最后一个样例结尾不换行,其他结尾都换行<=>除了第一个样例开始前不换行,其他都换行。

3.负数的二进制:取反用 ! ,而不用~ ——因为~是按位取反,先转化为二进制取反,再转化为十进制,使得输出不再是二进制。

4.输出二进制:用数组从0->32储存,再从32->0的输出,从而正确输出二进制。

例如:

for(i=0;i<=32;i++)
{ a[i]
=1; a[i]=n%2; n=n/2; if(n==0) break; }
for(i=31;i>=0;i--)
{
    printf("%d",a[i]);
        if(i==8||i==16||i==24||i==32)  
}  

 

posted @   吧拉吧拉吧  阅读(1069)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 我与微信审核的“相爱相杀”看个人小程序副业
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示