C语言-整数类型

整数类型





Reg为寄存器

字长,是说这个寄存器是多少宽的,每个寄存器可以表示32bit数据,也是说CPU与RAM每一次传递的数据也是32bit

计算机内部一切都是二进制

所有的类型,只是说我们以什么方式去看待它,并不是表明,它在内部是怎么 表达的。

整数的内部表达

18 -> 00010010

-18 -> ?

我们在做十进制运算时,我们实际上总是把负号先抛掉,把它当做一个整数做运算,在运算的结果上再解决负号问题。

例如:12+(-18)-> 12-18 -> -6

12 * -18 -> -(12 * 18)



第一种方法需要在计算时需要添加符号来控制符号,不利于计算机内部的设计

第二种方法在使用时需要与中间数进行运算来判断当前数的具体数值

两种方法都使得计算机的输入输出变得复杂。

实际计算机中使用的是补码来表示负数

补码思想:

256是28就是256((1)00000000),28-1就是-1的补码

补码的意义就是拿补码和原码可以加出一个溢出的“零”

这样可以直接做普通的二进制运算,不需要进行+-符号的变换

整数的范围



高位为0,表示1-127

高位为1,表示-1 - -128

#include <stdio.h>

int main()
{
char c = 255;
int i = 255;
printf("c=%d,i=%d\n",c,i);
// 对于char c 来说为11111111最高位为1是负数
//对于int(32bit) i来说为00000000 00000000 00000000 11111111
return 0;
}

int的范围

-232-1 ~ 232-1-1

char 表达的是-128 ~ 127(中间有0)

所有整数类型范围,在是2n-1 ~ 2n-1-1

如果想将11111111当做一个纯二进制的来看需要unsigned来表达



unsigned的意思是这个整数不以补码的形式表示,没有负数,使得正数的表达范围被扩大。

00000000-11111111 unsigned表示0-255,原来是-128~127

整数越界



第二个01111111是127,加1 后本来是128,但128作为一个整数char来说,它所表达的是-128

将数的范围想象成一个圆



对一个unsigned char来说,127+1就等于128,如果是255,+1才变成0

所以对于unsigned char来说,另一个圆



使用数的范围可以找出int的最大数来,这也是翁凯老师留的一个小测验。

主要思想还是不断累加(while循环),当最后累加的数小于0时,用这个数再减1就等到int能表示的最大值

整数的格式化



所有小于int的,char、short、int都采用相同的输出就是用%d;所有比int大的,需要用%ld

#include <stdio.h>
int main()
{
char c = -1;
int i = -1;
printf("c=%u,i=%u\n",c,i);
return 0;
}

上面结果一样都是4294967295(-1表示全1),这个数是unsigned int所能表达的最大的数,char正常-1只有一个字节,只有最低位为1,当我们把小于int的变量传给printf时,编译器会把变量转换为int传进去,因为是有符号的,会被扩展为所有位都是1,最后作为unsigned结果就是现在这个结果。

八进制和十六进制

  • 一个以0开始的数字字面量是8进制
  • 一个以0x开始的数字字面量是16进制
#include <stdio.h>
int main()
{
char c = 012;
int i = 0x12;
printf("c=%d,i=%d\n",c,i);
//%o是8进制,%x是16进制
return 0;
}
//输出结果为c=10,i=18

%d是想让它以十进制的方式输出。

八进制,1x8+2x1=10;十六进制,1x16+2x1=18

进制只是我们怎么去看它,并不代表在计算机内部它会表示成八进制或十六进制,

计算机内部永远只有二进制,你在程序中写个八进制,编译器会替你转成对应的十进制形式去变成二进制交给计算机

小总结:





0001 (1) 00010(2)前四个bit表达为1,后四个为2,12就可以表达前面的二进制数,16进制的两位正好表达一个char(1个字节)

选择整数类型





CPU每次从内存中读一次数据,每一次向其中写一次数据,就是一个int,如果你让它做一个char,实际上它做的就是把32 bit的数据全部读进来,然后从当中拿出那8 bit给你。

C语言-整数类型的更多相关文章

  1. C语言整数类型在X86和X64下的字节大小

    C声明 32位机器(X86) 64位机器(X64) char 1 1 short int 2 2 int 4 4 long int 4 8 long long int 8 8 char * 4 8 f ...

  2. 对C语言整数类型的一点理解

    作者:autogeek 原文链接:http://www.cnblogs.com/autogeek/p/4321635.html 1.先从一个列子引出问题: //sample_1 unsigned ch ...

  3. C语言基础学习基本数据类型-其他整数类型

    其他整数类型 初学C语言时,int类型会满足你对整数的大多数需求. C语言还提供了三个关键字用以修饰基本的整数类型:short.long和unsigned.有以下几个注意点: (1)C语言没有具体规定 ...

  4. 如何用一个语句判断一个整数是不是二的整数次幂——从一道简单的面试题浅谈C语言的类型提升(type promotion)

    最近招聘季,看JULY大哥的面试100题时,碰到这么一个扩展问题: 如何用一个语句判断一个整数是不是二的整数次幂?(此题在编程之美也有) easy, 2的整数次幂的二进制形式只有一个1,只要用i和i- ...

  5. C语言三种整数类型

    1,int 是 C 语言的基本整数类型,可以满足我们处理一般数据的需求. C 语言还提供了四个可以修饰 int 的关键字:short.long.signed,以及 unsigned. 利用这四个关键字 ...

  6. C语言常见类型占用字节数

    前言 最近笔试经常遇到c语言各类型变量所占字节数的问题,这里做一个总结好了. 类型 常见的有char.int.long.short.float.double及指针等. 字符类型 这里单只char,ch ...

  7. c语言的类型、运算符与表达式

    title: 2017-10-17c语言的类型.运算符与表达式 tags: c程序设计语言 grammar_cjkRuby: true --- 1.1 数据类型 char 字符型,一个字节 int 整 ...

  8. python3 整数类型PyLongObject 和PyObject源码分析

    python3 整数类型PyLongObject 和PyObject源码分析 一 测试环境介绍和准备 测试环境: 操作系统:windows10 Python版本:3.7.0 下载地址 VS版本:vs2 ...

  9. C对64位整数类型的支持

    在使用C语言过程中可能需要接触长整数类型,其中包括固定长度数据类型的声明.输入输出函数的标志符等细节,在此记录. int64_t 与 uint64_t C的标准只规定特定数据类型需要实现的最小长度,特 ...

随机推荐

  1. S32K144之FlexMem,FlexNVM,FlexRAM,System RAM, SRAM 区别与联系

    参考手册中常常见到有关memory的关键字,如FlexMem,FlexNVM,FlexRAM,System RAM, SRAM,那么它们到底是什么意思呢?有什么区别和联系? 参考资料 [1]S32K1 ...

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:表示成功的动作

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. QQ企业通--客户端登陆模块设计---知识点

    AutoValidate 枚举  确定控件在失去用户输入焦点时应如何验证其数据. 成员名称 说明 Disable 将不进行隐式验证.设置此值将不会妨碍对 Validate 或 ValidateChil ...

  4. Mybatis+Spring的整合练习

    一.建立数据库.建表 二.新建maven项目 三.添加依赖 <dependencies> <dependency> <groupId>junit</group ...

  5. jqGrid一次性读取本地数据

    参考:http://blog.sina.com.cn/s/blog_54da57aa010154r7.html

  6. 第3节 storm高级应用:4、5、ack机制,以及其验证超时

    4.  消息不丢失机制 4.1.ack是什么 ack 机制是storm整个技术体系中非常闪亮的一个创新点. 通过Ack机制,spout发送出去的每一条消息,都可以确定是被成功处理或失败处理, 从而可以 ...

  7. java的浅拷贝和深拷贝(待解决)

    1.什么是浅拷贝,什么是深拷贝? 2.storm的并行度问题,需要使用全局变量static ConcorrentHashMap,因为加了static,所有的线程只能拷贝该全局变量的一个唯一的副本,进行 ...

  8. 使用switch编写一个购物管理系统

    在编写过程中,可能没有做到语句的精简,这个是需要解决的事. package nzcc4; import java.util.Scanner; public class Shopmain { publi ...

  9. 伪奢侈品iPhone大降价,肉搏国产手机胜算几何?

    据国外媒体报道,苹果在中国降低iPhone价格的策略已收到明显的效果,自从1月11日正式调整价格以来,iPhone在苏宁电器平台上的销量飙升83%,而天猫上的销量也增长了76%,其中最受欢迎的机型是i ...

  10. input文件类型上传,或者作为参数拼接的时候注意的问题!

    1.ajax请求参数如果为文本类型,直接拼接即可.如果为file类型就需要先获取文件信息 2.获取文件信息: HTML代码: <div class="form-group"& ...