码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-12-28 19:30:45      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:进制   长整型   一半   语言   ongl   补码   window   sig   images   

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输出int值

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

%o,输出8进制的int

%x,输出16进制的int

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

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

%p 输出内存地址

 

3. 大端对齐和小端对齐

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

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

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

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

技术分享

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

 

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

标签:进制   长整型   一半   语言   ongl   补码   window   sig   images   

原文地址:http://www.cnblogs.com/yongdaimi/p/6230103.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!