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. python关键日期计算

    在coding的过程中有时候会需要用到一些特殊日期,比如说是一个月的最后一天的日期,昨天的日期等等. def first_day_of_next_month(self, old_date): old_ ...

  2. .NET List<T>Conat vs AddRange

    最大的不同在于AddRange改变了它所调用的列表,而Concat创建了一个新的List.因此它们有不同的用途. Concat也是一种适用于任何IEnumerable的扩展方法,并返回一个IEnume ...

  3. 网络请求中的URL中传bool型数据

    如果在URL中要拼接bool的数据,OC这边不能使用BOOL型.因为使用NSString的拼接字符串类方法中,会将BOOL型数据转化为0或者1. 解决办法: NSString *overdue_str ...

  4. 面试题之第一部分(Python基础篇) 80题

    第一部分(python基础篇)80题 为什么学习Python?==*== # 1. python应用于很多领域,比如后端,前端,爬虫,机器学习(人工智能)等方面,几乎能涵盖各个开发语言的领域,同时它相 ...

  5. swift正点

    Openstack Swift 原理.架构与 API 介绍 http://www.openstack.cn/?p=776 ——Openstack Swift 开源云存储技术解析 OpenStack S ...

  6. 简单易懂之python 中的map,filter,reduce用法

    map(function,sequence) 把sequence中的值当参数逐个传给function,返回一个包含函数执行结果的list. 重点是结果返回一个列表,这样对返回的列表就可以干很多的活了. ...

  7. 远程服务器使用tensorboard

    1 .由于服务器上tensorboard使用的端口是6006,因此,连接ssh时,将服务器的6006端口重定向到自己机器上的16006端口: ssh -L 16006:127.0.0.1:6006 u ...

  8. swift4之String与NSString的区别与使用

    String是结构体,NSString是类,这是它们的根本区别. 在 Swift 中,结构体struct是值类型,String是结构体,所以也是值类型.值类型被赋予给一个变量.常量或者被传递给一个函数 ...

  9. SQL常用关键字

    常用SQL语句 SAP实际上提供了两种访问数据库的方式:Open SQL与Native SQL ---语句 功能 数据操作   insert 向表添加新数据行 delete 从表中删除数据行 upda ...

  10. Maven项目- "null" 的java.lang.reflect.InvocationTargetException 解决方法

    异常显示: 解决方法: