[問題] unsigned int bitwise operator

作者: shiningboy   2018-05-14 00:30:53
開發平台(Platform): (Ex: Win10, Linux, ...)
Lubuntu (Linux)
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
n/a
問題(Question):
大家好,新手自學
#include <stdio.h>
#include <stdlib.h>
int main(){
unsigned int a = 10;
signed int b = 10;
a = ~a;
b = ~b;
printf("a : %d\n");
printf("b : %d]n");
}
output :
a = -11
b = -11
這邊的問題是有關於 a
a = 10 , in bit 應該是
00000000 00000000 00000000 00001010
a = ~a 之後
11111111 11111111 11111111 11110101
^
not sign bit
我這邊一開始設定 a 是 unsigned int
也就是應該第 32 bit 應該不是 sign bit
所以 print out in %d 之後預期的結果應該是 unsigned int 的 最大值 - 10
可是為什麼變成了 -11
再請各位前輩解惑了
謝謝
餵入的資料(Input):
資料如上
預期的正確結果(Expected Output):
預期為 unsigned int 最大值 - 11
錯誤結果(Wrong Output):
no error code
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
code 如上
補充說明(Supplement):
n/a
作者: jobsdone (完工了)   2018-05-14 00:36:00
%u
作者: cutekid (可愛小孩子)   2018-05-14 00:36:00
%d 造成的唷。改%u
作者: djshen (djshen)   2018-05-14 00:40:00
你可以查printf的文件
作者: rbufghj9713 (我只是來潛水)   2018-05-14 11:37:00
資料長那樣沒錯,不過解讀的方法錯了
作者: chuegou (chuegou)   2018-05-14 19:43:00
你是不是在找2補數?
作者: rbufghj9713 (我只是來潛水)   2018-05-14 21:04:00
剛剛才發現一件事情,你預期的正確結果應該是-10吧?你好像寫成-11了

Links booklink

Contact Us: admin [ a t ] ucptt.com