zoukankan      html  css  js  c++  java
  • check the sentence &ff

    //date 2013 4 17
    //designer :pengxiaoen
    //function : check the sentence &ff

    #include "stdio.h"
    #include "stdlib.h"
    int main ()
    {
    int a_32bit = -5 ;
    char b_8bit =0x28;

    //char b_8bit =0x82;


    char char_a_32bit[100];
    char char_b_8bit[100];

    printf ("%%b a_32bit = %s\n", itoa(a_32bit, char_a_32bit, 2));
    printf ("%%b b_8bit = %s\n", itoa(b_8bit, char_b_8bit, 2));

    printf ("the sizeof a_32bit = %d\n", sizeof (a_32bit));
    printf ("the sizeof b_8bit = %d\n", sizeof (b_8bit));

    printf ("\n\n");

    a_32bit = a_32bit & 0xff;
    b_8bit = b_8bit & 0xffff;

    printf ("%%b a_32bit = %s\n", itoa(a_32bit, char_a_32bit, 2));
    printf ("%%b b_8bit = %s\n", itoa(b_8bit, char_b_8bit, 2));

    printf ("the sizeof a_32bit &0xff = %d\n", sizeof (a_32bit));
    printf ("the sizeof b_8bit &0xffff= %d\n", sizeof (b_8bit));

    system ("pause");

    }

    结果

      这个结果可以发现:a_32bit 赋值初期输出32bit。(如果是赋值5,这等整数,前面的0就被省略了,所以用负数赋值给a_32bit)。当&0xff后就输出八位,这就是我们在C中常用的缩位。但是char 类型在这里却不给力啊,什么情况呢?

      好做一点修改:将 char b_8bit =0x28;这条语句修改成  char b_8bit =0x82;也就是讲char的最高位变成了 1 。结果大出意料

      请问这是为什么呢?itoa()这个函数不好惹,因为我没有查到这个函数底层是如何实现的,所以我也不知道为什么。

      继续思考后来将printf ("%%b b_8bit = %s\n", itoa(b_8bit, char_b_8bit, 2)); 替换成    printf ("%%b b_8bit = %s\n", itoa(b_8bit& 0xfffff, char_b_8bit, 2)); 结果正常了

      b的输出的确变成了20个bit,在b_8bit = b_8bit & 0xffff;这条语句中,由于左边只有8 bit,所以还是以8bit 存储。但是目前还是无法解释 为什么char类型8bit为什么在itoa()中输出32bit,而且规律是 多余位用最高位补齐了。

      这是为什么呢?思考中................

  • 相关阅读:
    CSP介绍、以及使用CryptoAPI枚举CSP并获取其属性
    Data Binding Guide——google官方文档翻译(下)
    ZOJ 3430 Detect the Virus 【AC自动机+解码】
    Visual Studio 中 Tab 转换为空格的设置
    梭子鱼:APT攻击是一盘更大的棋吗?
    APT攻击将向云计算平台聚焦
    【转】ubuntu修改IP地址和网关的方法
    程序员谈学习:我为什么要学习Linux?
    VS2010 快捷键
    Visual Assist X 10.6.1837完美破解版(带VS2010破解)
  • 原文地址:https://www.cnblogs.com/sepeng/p/check.html
Copyright © 2011-2022 走看看