• C语言基础(5)-有符号数、无符号数、printf、大小端对齐


    1.有符号数和无符号数

    有符号数就是最高位为符号位0代表正数,1代表负数

    无符号数最高位不是符号位,而就是数的一部分而已。

    1011 1111 0000 1111 1111 0000 1011 1010,如果当有符号数看待,那么他是一个负数的补码,如果当一个无符号数看待,他就是一个正数的原码

    无符号数最小为0,不可能是负数

    定义一个无符号的int

    unsigned int a; //使用unsigned int 定义了一个无符号的int变量,名字叫a

    short,long,long long, unsigned int

    short是短整型,一般shortint的一半大小,short32位的windows下是2个字节

    short最大能存放多大的十六进制数?7fff

    当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化,但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。

    long是长整型,long的大小变化比较多,在32位的windows下是4个字节,在64位的windows4个字节,在32位的linux4个字节,在64位的linux8个字节

    long long长长整型,longlong32位系统和64位系统下都是8个字节

    unsigned int,unsigned short ,unsigned long, unsigned long long

    100默认是int,100L代表long类型的常量,100LL代表long long类型的常量

    100u代表unsigned int类型的常量,如果想表达一个unsigned long long 类型的常量,100ull

    9l,9L,9ll,9LL,9u,9ull,9ULL

    2. printf输出值

    %d输出一个有符号的10进制int类型

    %o,输出8进制的int

    %x,输出16进制的int

    %X,输出16进制的int,但abcd这些都用大写字母

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

    %p 输出内存地址

    %u的意思是输出一个unsigned int 类型的数

    %lu的意思是输出一个unsigned long 类型的数

    %f 的意思是输出float类型的数

    %lf是输出double ,long double 类型的浮点数

    %c是输出一个char类型的字符

    例:以十六进制形式输出一个byte值,带前缀,空位补0:

    byte a = 10;

    printf("a is: %#04x ", a);

    得到的值是:0x0a

    # 代表加上十六进制的前缀也就是0x, 04代表输出宽度为4,宽度不足以0补齐。

    3. 大端对齐和小端对齐

    计算机的内存最小单位是什么?是BYTE,是字节,一个大于BYTE的数据类型在内存中存放的时候要有先后顺序。

    高内存地址放整数的高位,低内存地址放整数的低位,这种方式叫到着放,术语叫小端对齐。X86ARM都是小端对齐的。

    高内存地址放整数的低位,低内存地址放整数的高位,这种方式叫正着放,术语叫大端对齐,很多unix服务器的CPU是大端对齐的。

    定义一个int类型的变量a,在VS下可以看到其在内存中的排列方式如下:

    说明windows系统是小端对齐的。

     

  • 相关阅读:
    MFC OnOk(),OnCancel(),OnClose(),OnDestroy()的区别总结
    MFC中的Invalidate、OnDraw、OnPaint函数的作用
    MFC中和定时器使用
    SwapBuffers的等待,虚伪的FPS(转)
    OpenGl常用函数说明
    Win7_Ultimate + VS2010 + openGL_MFC单文档应用开发框架搭建步骤
    OpenGL模型视图变换、投影变换、视口变换的理解
    不同电脑的开机启动项
    第一百二十三节,JavaScript错误处理与调试
    第一百二十二节,JavaScript表单处理
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/6230103.html
走看看 - 开发者的网上家园