C语言-整数类型
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语言-整数类型的更多相关文章
- 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 ...
- 对C语言整数类型的一点理解
作者:autogeek 原文链接:http://www.cnblogs.com/autogeek/p/4321635.html 1.先从一个列子引出问题: //sample_1 unsigned ch ...
- C语言基础学习基本数据类型-其他整数类型
其他整数类型 初学C语言时,int类型会满足你对整数的大多数需求. C语言还提供了三个关键字用以修饰基本的整数类型:short.long和unsigned.有以下几个注意点: (1)C语言没有具体规定 ...
- 如何用一个语句判断一个整数是不是二的整数次幂——从一道简单的面试题浅谈C语言的类型提升(type promotion)
最近招聘季,看JULY大哥的面试100题时,碰到这么一个扩展问题: 如何用一个语句判断一个整数是不是二的整数次幂?(此题在编程之美也有) easy, 2的整数次幂的二进制形式只有一个1,只要用i和i- ...
- C语言三种整数类型
1,int 是 C 语言的基本整数类型,可以满足我们处理一般数据的需求. C 语言还提供了四个可以修饰 int 的关键字:short.long.signed,以及 unsigned. 利用这四个关键字 ...
- C语言常见类型占用字节数
前言 最近笔试经常遇到c语言各类型变量所占字节数的问题,这里做一个总结好了. 类型 常见的有char.int.long.short.float.double及指针等. 字符类型 这里单只char,ch ...
- c语言的类型、运算符与表达式
title: 2017-10-17c语言的类型.运算符与表达式 tags: c程序设计语言 grammar_cjkRuby: true --- 1.1 数据类型 char 字符型,一个字节 int 整 ...
- python3 整数类型PyLongObject 和PyObject源码分析
python3 整数类型PyLongObject 和PyObject源码分析 一 测试环境介绍和准备 测试环境: 操作系统:windows10 Python版本:3.7.0 下载地址 VS版本:vs2 ...
- C对64位整数类型的支持
在使用C语言过程中可能需要接触长整数类型,其中包括固定长度数据类型的声明.输入输出函数的标志符等细节,在此记录. int64_t 与 uint64_t C的标准只规定特定数据类型需要实现的最小长度,特 ...
随机推荐
- :before 与 :after
http://justcoding.iteye.com/blog/2032627 网址
- Python中from scipy.misc import imread报错的原因?
from scipy.misc import imread 报错 查询后其原因是from scipy.misc import imread,imwrite 等方法已经被弃用,Python已经将imre ...
- primecoin服务常用命令和参数说明
Primecoin命令: 启动服务:./primecoind -daemon -rpcuser=user -rpcpassword=password -txindex=1 -addrindex=1 - ...
- IDEA中maven工程打包时使用跳过test模式
- 在IDEA中如何使用tomcat部署项目
1.首先,你得先建个Java 项目,然后next 2.新建完项目后,然后右击项目,选择“Add Framework Support...” 3.将Web Application 前的框勾选起来,然后点 ...
- 如何利用TableView显示自定义nib中创建的UITableViewCell或子类?
1.创建nib文件 cell.xib 2.在nib中拖一个UITableView出来,设置其reuse Identifier,再根据cell UI需要拖出view摆放好 3.创建ViewControl ...
- POJ 2391 Ombrophobic Bovines 网络流 建模
[题目大意]给定一个无向图,点i处有Ai头牛,点i处的牛棚能容纳Bi头牛,求一个最短时间T使得在T时间内所有的牛都能进到某一牛棚里去.(1 <= N <= 200, 1 <= M & ...
- Hive事务原理和Datax同步事务表问题解决
一.事务的概述 1.定义 事务就是一组单元化操作,这些操作要么都执行,要么都不执行,是一个不可分割的工作单位. 2.特点 事务(transaction)具有的四个要素:原子性(Atomicity).一 ...
- SciPy 图像处理
章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...
- Window Server 2019 配置篇(8)- 利用MDT定制自动加入域的脚本
我们要更改我们的镜像文件,使得自动安装完成后,计算机已经自动在域中 删除在WDS-server上做的自动部署,我们在上面安装一下MDT和ADK文件,这两个文件如果需要的话可以评论,我会在随后上传 之后 ...