当前位置: 首页 > news >正文

c语言数据类型(一)

(强数据类型)

1.常量

  常量是程序中不可变的量

  10为常量

  

  两种常量

  #define 定义宏常量

  const

  

  #对于#define 类型的常量,c语言的习惯是常量名称大写, 对于普通const常量以及变量,一般以小写结合大写的方式

 

#include <stdio.h>

int main() 
{
    printf("%d", 10);
    return 0;
}
#include <stdio.h>

#define MAX 10 //定义一个宏常量 值为10
int main() 
{
    printf("%d", MAX);
    return 0;
}
#include <stdio.h>

#define MAX 10 //定义一个宏常量 值为10
int main() 
{    
    //MAX = 200; //等号左边必须为变量,不能为常量,常量的值不能修改
    printf("%d", MAX);
    return 0;
}
#include <stdio.h>
int main() 
{    
    const int a = 100;
    printf("%d", a);
    return 0;
}

  

  以上为整数常量

  

  字符串 常量

  

#include <stdio.h>
#define STRING "hello world\n";
int main() 
{    
    const char * str = "hello c";
}

 

 

2. 二进制 位 字节 字

  一个位只能表示 0 1 两种状态    bit  1位位1bit

  一个字节为八个二进制  8位   BYTE   8个bit一个字节

  500GB B为BYTE         10Mb bit 

  1个字 2个字节  简称WORD

  2个字为双字      ZWORD

 

  0 八进制 0x 16进制 

 

  

  原码 反码 补码

  整数占 4个字节 以下只写了 1个字节举例子

 

 

   

 

    

 

sizeof 关键字

 

  是c语言关键字,功能是求指定数据类型所占用的字节数。

#include <stdio.h>
int main() 
{    
    printf("%d\n", sizeof(10));
    return 0;
}

 

  32位(bit)操作系统返回的为4     最大的存储的数字   2(32-1) 的数字

 

  size_t 类型 

  

int类型

  int 常量变量

  int 是32位的一个二进制整数,在内存中占据4个字节‘’

   %d  , 输出一个有符号的10进制整数

   %u , 代表输出一个无符号的10进制的整数

 

 

int main() 
{    
    printf("%x\n", 0x10);//输出10
    printf("%x\n", 10);//输出十进制10对应得十六位a
    printf("%x\n", 0xa);//输出a
    return 0;
}

 

 

#include <stdio.h>
int main() 
{    
    printf("%x\n", 0x10);//输出10
    printf("%x\n", 10);//输出十进制10对应得十六位a
    printf("%x\n", 0xa);//输出a
    printf("%x", -7);
    return 0;
}
/*
printf("%x", -7);  输出 fffffff9(这是-7的补码转换为16进制)
源码 10000000 00000000 000000000 00000111
反码 11111111 11111111 111111111 11111000
补码 11111111 11111111 111111111 11111001
*/

/*
-7
1000 0111 用有符号的眼光-7 无符号的眼光135
*/

 

 

 

%x 代表输出十六进制数 (十六进制不表达负数)

%X 用大写字母方式输出16进制数

%o 输出八进制数 (2进制与八进制不表达负数)

 

short、 long 、int 、 long long 、unsigned  、signed(有符号数)

  short 为短整数 在32位操作系统占2个字节

  long 代表长整数, 在32位系统下位4个字节  在64位系统下,windows 4个字节  Unix 为八个字节(不同的操作系统不一样)

  int  (32位系统以上)不论在什么情况下都是4个字节 

  long long 是64位 也就是八个字节的整数  对于32位操作系统cpu寄存器位32位的,计算longlong类型的数据, 效率很低

  unsigned  无符号的数,可以加在任意整数类型后面

 

#include <stdio.h>
int main() 
{    
    int a = 10;//4个字节
    short b = 10;
    printf("%d\n", sizeof(b));//2
    return 0;
}
#include <stdio.h>
int main() 
{    
    int a = 10;//4个字节
    short b = 10;
    long long c = 10;
    printf("%d\n", sizeof(c));//8
    return 0;
}
#include <stdio.h>
int main() 
{    
    int a = 10;//4个字节
    short b = 10;
    long long c = 10;
    unsigned int d = 10;
    printf("%d\n", sizeof(d));//4
    return 0;
}

 

 整数溢出

一个整数计算的时候超过整数能够容纳的最大单位后,整数会溢出,溢出的结果是高位舍弃。

 当一个小的整数复制给大的整数,符号位不会丢失,会集成

    unsigned short abc = 0xffff;
    abc = abc + 1;
    printf("%d\n", abc);//0
    return 0;
  
#include <stdio.h>
int main() 
{    
    int a = 10;//4个字节
    short b = 10;
    long long c = 10;
    unsigned int d = 10;
    printf("%d\n", sizeof(d));//4

    unsigned short abc = 0xffff;
    //abc = abc + 1;
    //printf("%d\n", abc);//0
    
    abc = abc + 100;
    printf("%d\n", abc);//99

    abc = 2;
    abc = abc - 5;
    printf("%u\n", abc);//65533

    int i1 = 0x12345678;
    abc = i1;
    printf("%x\n", abc);//5678 

    short abc1 = -2;
    //1000 0000 0000 0010
    //1111 1111 1111 1101
    //1111 1111 1111 1110(-2)
    //1111 1111 1111 1111 1111 1111 1111 1110
    
    i1 = abc1;
    printf("%x\n", i1);//fffffffe

    unsigned short abc2 = 0;

    abc2 = abc2 - 1;
    //00000000 00000000
    //10000000 00000001
    //11111111 11111110
    //11111111 11111111(65535)
    printf("%d\n", abc2);//65535
    
    //00000000 00000000 00001100
    //10000000 00000000 00000000 00001010
    //11111111 11111111 11111111 11110110
    return 0;

}

 

 

 

 

 

 

 

内存都是以字节为单位的 

1个整数,4个字节

 

大端对齐 与小端对齐

  对于arm,intel 这种x86 构架的复杂指令CPU ,整数在内存是倒着放的,低地址放高位,高地址放低位, 小端对齐

  但对于uniux服务器的CPU,更多的是采用大端对齐的方式存放整数

  

 

 

 

转载于:https://www.cnblogs.com/long613/p/7617510.html

相关文章:

  • VS中 Duplicate items are not supported by the Resources parameter 解决方法
  • SaaS与本地部署该如何闯出属于自己的路?
  • 记录下sparkStream的做法(scala)
  • JavaScript总结1
  • EXTJS学习系列提高篇:第二十三篇(转载)作者殷良胜,ext2.2打造全新功能grid系列--显示列表第二篇...
  • caffe源码 全连接层
  • [Spark][Python][RDD][DataFrame]从 RDD 构造 DataFrame 例子
  • 使用SQLite做本地数据缓存的思考
  • 与Brian Goetz聊Java的模式匹配
  • 感叹人生
  • Flash Builder 4.7 正式版下载、破解
  • 苹果开发者账号的区别,发布方式In-House和Ad Hoc区别
  • Safari on Windows已可良好支持中文!
  • chrome 图片助手下载
  • 智能社官网顶部导航实现demo
  • __proto__ 和 prototype的关系
  • 2018一半小结一波
  • android图片蒙层
  • C++11: atomic 头文件
  • co.js - 让异步代码同步化
  • es6(二):字符串的扩展
  • iOS | NSProxy
  • mysql_config not found
  • React Transition Group -- Transition 组件
  • Redis在Web项目中的应用与实践
  • 关于List、List?、ListObject的区别
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 力扣(LeetCode)357
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 普通函数和构造函数的区别
  • 数据仓库的几种建模方法
  • 思否第一天
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • hi-nginx-1.3.4编译安装
  • # Maven错误Error executing Maven
  • #android不同版本废弃api,新api。
  • #宝哥教你#查看jquery绑定的事件函数
  • $.ajax()
  • $.each()与$(selector).each()
  • (done) 两个矩阵 “相似” 是什么意思?
  • (搬运以学习)flask 上下文的实现
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)Sublime Text3配置Lua运行环境
  • (转)原始图像数据和PDF中的图像数据
  • (转载)Linux 多线程条件变量同步
  • (转载)深入super,看Python如何解决钻石继承难题
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET gRPC 和RESTful简单对比
  • .NET 读取 JSON格式的数据
  • .net 流——流的类型体系简单介绍
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .net和php怎么连接,php和apache之间如何连接
  • .NET开源快速、强大、免费的电子表格组件