计算机内部整数的表示(二进制存储)

10、在16位机器上跑下列foo函数的结果是(B)(阿里2014笔试题)
   void foo()
   {
       int i = 65536;
       cout << i<<”,”;
       i = 65535;
       cout << i;
   }
   A、-1,65535   B、0,-1     C、-1,-1    D、0,65535 
解析:16位机器的int型变量为16位

16位int的表示范围:-32768到32767 
65535(十进制) = 1111111111111111(二进制) 
65536(十进制) = 10000000000000000(二进制) 
上面是原码表示 (也是计算机内部补码的表示)
转换为原码,除了最高位,其它位取反,加一 
原码输出:分别为0和-1

验证:

#include<stdio.h>
int main()
{
    __int16 a=65536;
    __int16 b=65535;
    __int16 c=65535+3;
    printf("十六进制输出:%x %x %x\n",a,b,c);
    printf("十进制输出:%d %d %d\n");
}

输出:

十六进制输出:0 ffffffff 2
十进制输出:0 -1 2

计算机内部整数的表示(二进制存储)

时间: 2024-10-07 04:34:05

计算机内部整数的表示(二进制存储)的相关文章

深入了解整数在计算机内部的表示

1. 无符号整数的表示 我们知道,无符号整数在计算机内部是以二进制的形式存储的,比如我们在C语言中声明并初始化一个变量: int i = 66; 假设我们针对的机器是32位机器,byte order为little endian.由于int类型是32位的,66这个数字就会被存储为它的32位二进制表示(01000010 00000000 00000000 00000000),共占据4个存储单元. 这样一来,32位二进制数所能表示的无符号整数共有2^32个,范围为[0, 2^32 - 1].然而,我们

【输出一个整数的二进制存储形式】

// 输出一个整数的二进制存储形式void putBinary(int n){ int bits = sizeof(n) * 8; while (bits-->0) { printf("%d", n>>bits&1); if (bits%4==0) printf(" "); } printf("\n");}

【C/C++语言】int 在计算机内部的存储

int在32位计算机中占4个字节,主要是想弄清楚这4个字节的在内存中存放的顺序. 1 #include <iostream> 2 3 using namespace std; 4 5 typedef struct int_char 6 { 7 int a; 8 unsigned char *b; 9 }; 10 11 int main() 12 { 13 int_char A; 14 int i; 15 //test int; 16 A.a=0x01ab02cd; 17 A.b=(unsign

查看数字在计算机内部的二进制表示

转载请注明原文出处,http://www.cnblogs.com/flyingcloude/p/6992526.html #include<stdio.h> int main(void){        char c=97;        short s=97;        int n=97;        float f=97;        double d=97; int i,j;        printf("char 97在计算机中的二进制表示:");     

机器数与码制(如何在计算机内部存储数字)

机器数 机器数 各种数据在计算机内部的表示和存储形式称为机器数. 特点: 采用二进制计数: 数的符号(正负)用“0.1”表示: 小数点隐含表示二不占位置. 机器数的真值 机器数所对应的实际数值. 机器数的分类 无符号机器数和带符号机器数. 无符号机器数 无符号(无正负号)机器数表示正数,没有符号位. 码制 原文地址:https://www.cnblogs.com/victoryluyun/p/11086962.html

计算机中整数加法满足结合律吗

今天看<程序设计语言概念>(Concepts of Programming Language),第七章“结合性”一节中有这么一段: 某些计算机中的整数加法不具有结合性.例如,假设一个程序要计算“A + B + C + D”,其中A.C是很大的正数,B.D是绝对值很大的负数.在这种情况下,将B加到A并不会导致溢出,但将C加到A就会溢出.B和D与此类似. 这段话很好理解,因为只要是程序员,整数计算可能会溢出是基本的常识.但这段话只谈到计算的中间结果发生溢出的情况.如果不考虑中间结果而将重点放在最终

Formiko总结整数十进制转换二进制原理

引子: 为什么十进制转二进制的“辗转相除记录余数倒序输出”的算法是正确的?这个问题陪伴了Formiko半年. 实践: 实践一:把十进制数100转换成二进制数的图   上图和和下图唯一的区别在最后一位上,只是除到0和除到1的区别,但在算法本身的理解上应该不会有本质的区别. 实践二: 十进制数100或许太大,不便于一目了然的验证.试一试十进制数1,2,3. 思考: 以上算法的思路是“对原数反复进行除法得到余数,最后将余数倒序输出”.但是看到如图对十进制数100,1,2,3的操作,都看不出原思路的由来

C/C++ 图像二进制存储与读取

本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50782792 在深度学习时,制作样本数据集时,须要产生和读取一些二进制图像的数据集,如MNIST,CIFAR-10等都提供了适合C语言的二进制版本号. 以CIFAR-10的数据集为例.官网上有两段关键的介绍: 二进制版本号数据集格式为(图像大小为32x32): <1 x label><3072 x pixel> ... &

pick定理:面积=内部整数点数+边上整数点数/2-1

1 //pick定理:面积=内部整数点数+边上整数点数/2-1 2 // POJ 2954 3 4 #include <iostream> 5 #include <cstdio> 6 #include <cstdlib> 7 #include <algorithm> 8 #include <vector> 9 #include <math.h> 10 using namespace std; 11 #define LL long lo