Programming/Java2014. 3. 7. 21:13
1byte * 1byte를 해도 2byte가 한계임에도 불구하고 int 형으로 강제하는 것은
자바 컴파일러의 특성이나 언어적 정의 같은 느낌인데..

아무튼 a = 3; b = 4; 로 해도
값이 오버플로우 되지 않음에도 불구하고 강제로 int 형으로 하도록 한다.

short 형은 버림 받은 느낌이고...
public static void main(String[] args) {
// TODO Auto-generated method stub
byte a = 10;
byte b = 30;
byte c = (byte)(a * b);

System.out.println(c);
} 

(byte)를 빼면
 Type mismatch : cannot convert from int to byte
라고 에러(!)가 발생한다.

'Programming > Java' 카테고리의 다른 글

java와 cpp의 차이점 - 연산자 오버로딩 / 다중상속  (0) 2014.03.10
java explicit upcasting 묵시적 형변환  (0) 2014.03.07
java primitive data type + 연산자  (0) 2014.03.07
java framework  (0) 2014.03.06
java tutorial docs  (0) 2014.03.06
Posted by 구차니
Programming/Java2014. 3. 7. 16:38
long 형에 int형의 범위를 넘는 값을 입력할 경우 L을 붙여 주지 않으면 에러가 발생한다.
(The Literal 9223372036854775807 of type int is out of range)

실수는 d 식별자가 없으면 double형으로 인식한다.
float 형에만 강제로 f를 붙여 주어야 함.

Data TypeDefault Value (for fields)
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
String (or any object)   null
boolean false
[링크 : http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html]

변수 크기
boolean - true/false 1bit
byte - 1byte
char - 2byte

short - 2byte
int - 4byte
long - 8byte

float - 4byte
double - 8byte

>>> unsigned bitwise shift right
c에서는 타입에 따라서 unsigned shift / signed shift를 사용하지만
자바는 기본적으로 signed이기에 unsigned shift가 별도로 연산자 제공이 된다.
[링크 : http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html]

JVM 32bit/ 64bit 상관없이 long은 64bit
[링크 : http://stackoverflow.com/questions/9511836/size-of-java-primitives-on-32-64-bit-jvm]

JAVA 8 부터 unsigned int 지원예정
[링크 : http://stackoverflow.com/questions/9854166/declaring-an-unsigned-int-in-java]
[링크 : https://blogs.oracle.com/darcy/entry/unsigned_api]

'Programming > Java' 카테고리의 다른 글

java explicit upcasting 묵시적 형변환  (0) 2014.03.07
java byte 형의 오묘함  (0) 2014.03.07
java framework  (0) 2014.03.06
java tutorial docs  (0) 2014.03.06
java sdk 설치경로  (0) 2012.03.18
Posted by 구차니
Programming/Java2014. 3. 6. 18:06

'Programming > Java' 카테고리의 다른 글

java byte 형의 오묘함  (0) 2014.03.07
java primitive data type + 연산자  (0) 2014.03.07
java tutorial docs  (0) 2014.03.06
java sdk 설치경로  (0) 2012.03.18
java arraylist에서 중복항목 제거하기  (2) 2012.02.16
Posted by 구차니
Programming/Java2014. 3. 6. 15:10
epub 로도 제공하는데 일단 다운받아서 아이리버 스토리에 넣어보니
Updated for Java SE 7 이라고 나온다. 오오오!!!

docs.sun.com/java 가 아니라 docs.oracle.com/javase 라니 먼가 미묘한 기분... ㅠㅠ

[링크 : http://docs.oracle.com/javase/tutorial/]
    [링크 : http://www.oracle.com/technetwork/java/javase/java-tutorial-downloads-2005894.html

'Programming > Java' 카테고리의 다른 글

java primitive data type + 연산자  (0) 2014.03.07
java framework  (0) 2014.03.06
java sdk 설치경로  (0) 2012.03.18
java arraylist에서 중복항목 제거하기  (2) 2012.02.16
java xml dom 파싱  (0) 2012.02.06
Posted by 구차니
Programming/openGL2014. 3. 6. 15:03
조만간 쓸일이 있을 예정?


[링크 : http://www.geuz.org/gl2ps/]

'Programming > openGL' 카테고리의 다른 글

glColor*  (0) 2015.07.20
우분투에서 openGL 시작하기  (0) 2015.07.20
openGL state variables  (0) 2013.12.12
openGL에서 AVI 동영상 재생하기  (0) 2013.04.09
openGL gcc에서 컴파일 하기  (0) 2012.06.02
Posted by 구차니
Programming/C++ STL2014. 3. 5. 22:49
java와 같은 그런 정교한 예외처리는 아닌거 같아서 조금 실망
물론..cpp가 java보다 거의 20년 전 꺼라는걸 감안하면...

아무튼.. try{} 안에 문제점이 될 부분에서
문제점에 대한 if문을 하고 throw를 통해 (물론 타입별로 catch 문을 중첩가능함) 제어의 흐름을 통일 시킨다.
과거에는 수 많은 return문으로 구현하거나
에러발생시 끝부분으로 goto 하는걸 문법적으로 깔끔하게 구현한 셈

#include < iostream >
using namespace std;
int main(int argc, char **argv)
{
		int a = 12;
		int b = 1;
		double c = 0;

		try
		{
			if(b == 0) throw(b);
			else throw(c);
		}
		catch(int e)
		{
			cout << "divide by zero. throw " << e << endl;
		}
		catch(double e)
		{
			cout << "good job. throw " << e << endl;
		}

        return 0;
}

스탠다드 라이브러리로 존재한다.
#include <exception>
[링크 : http://www.cplusplus.com/reference/exception/exception/ ] 

'Programming > C++ STL' 카테고리의 다른 글

c -> cpp 추가사항  (0) 2014.03.10
오버로딩 / 오버라이딩  (0) 2014.03.10
연산자 오버로딩  (0) 2014.03.04
c++ explicit  (0) 2014.02.28
c++ class / const member variable & function  (0) 2014.02.28
Posted by 구차니
Programming/C++ STL2014. 3. 4. 23:10
연산자 오버로딩은 2가지 방법으로 사용이 가능한데
1. 외부함수를 friend로 허용 (2항)
2. 내부함수로 구현(1항)


외부 함수의 경우 2개의 값이 있어야 연산이 가능하기에 인자가 두가지 들어가지만
내부 함수로 구현할 경우 자기 자신을 기준으로 다른 값을 연산하기에 하나의 값만 받게 된다.

#include < iostream >

using namespace std;

class temp
{
public:
        int a;

        temp(int b) : a(b) {}
        int operator+(int b, int c) { a += b; return a; }
};

int main(int argc, char **argv)
{
        temp tt(1);
        cout << tt + 3;

        return 0;
}

위 소스는 의도적으로 내부함수에 대해서 2개의 인자를 주고 생성한 것이라 에러가 발생한다.
VS2008
 error C2804: 이항 'operator +'에 매개 변수가 너무 많습니다.

G++
 error: ‘int temp::operator+(int, int)’ must take either zero or one argument 


정상작동하는 소스, int operator+는 멤버함수로 구현 friend int operator+는 외부함수/friend 로 구현
#include < iostream >

using namespace std;

class temp
{
public:
        int a;

        temp(int b) : a(b) {}
//      int operator+(int b) { a += b; return a; }
        friend int operator+(temp t, int b)
        {
                t.a = t.a + b;
                return t.a;
        }
};

int main(int argc, char **argv)
{
        temp tt(1);
        cout << tt + 3;

        return 0;
}

'Programming > C++ STL' 카테고리의 다른 글

오버로딩 / 오버라이딩  (0) 2014.03.10
try - throw - catch  (0) 2014.03.05
c++ explicit  (0) 2014.02.28
c++ class / const member variable & function  (0) 2014.02.28
deep copy / shallow copy < object copy  (0) 2014.02.27
Posted by 구차니
Programming/C++ STL2014. 2. 28. 11:01
class_name a;
a =  val;

이런식으로 암시적으로 형 변환을 할 경우에 대해서
제한을 걸어 예측이 힘든 버그들을 막아주는 역활을 한다고 한다.

[링크 : http://opensw.wikidot.com/cpp-fundamentals-explicit]
[링크 : http://msdn.microsoft.com/en-us/library/h1y7x448.aspx]

'Programming > C++ STL' 카테고리의 다른 글

try - throw - catch  (0) 2014.03.05
연산자 오버로딩  (0) 2014.03.04
c++ class / const member variable & function  (0) 2014.02.28
deep copy / shallow copy < object copy  (0) 2014.02.27
crt0.o / crtexe.obj  (0) 2014.02.27
Posted by 구차니
Programming/C++ STL2014. 2. 28. 10:35
const 멤버변수는 초기화가 불가능 하지만 클래스에서 값을 준채로 초기화 할 수 없기에
 constructor(variables ...) : const variable(parameter) 

생성자에서 : 키워드를 이용하여 초기화 한다.(상속이 아니다!!!)
class class_name
{
    const int key; // const member variable

    class_name(int _key) : key(_key)
    {
    }
};  

아무튼.. const 멤버 변수가 하나라도 있으면 모든 생성자에 영향을 주는 듯
class student
{
	const int id;
	int age;
	char name[20];
	char subject[30];

public:
	student()
	{
	}

	student(int _id) : id(_id)
	{

	}

	student(int _id, int _age, char *_name, char *_subject) : id(_id)
	{
		age = _age;
//		id = _id;
		strcpy(name, _name);
		strcpy(subject, _subject);
	}

1>d:\cpp\ch12\ch12\ch12.cpp(13): error C2758: 'student::id' : 생성자 기본/멤버 이니셜라이저 목록에 초기화해야 합니다.
1>          d:\cpp\ch12\ch12\ch12.cpp(7) : 'student::id' 선언을 참조하십시오.
1>d:\cpp\ch12\ch12\ch12.cpp(44): error C2582: 'operator =' 함수는 'student'에서 사용할 수 없습니다. 


+
const 멤버 함수
 ret_type function(parameter ...) const

const 함수 내에서는
값을 조작할 수 없으며(포인터 값 return도 불가)
const 함수만 호출이 가능하다.
 

'Programming > C++ STL' 카테고리의 다른 글

연산자 오버로딩  (0) 2014.03.04
c++ explicit  (0) 2014.02.28
deep copy / shallow copy < object copy  (0) 2014.02.27
crt0.o / crtexe.obj  (0) 2014.02.27
c++ constructor  (0) 2014.02.26
Posted by 구차니
Programming/C++ STL2014. 2. 27. 11:46
객체 복사에 대한 전략이다.

깊은 복사는 캐릭터 배열까지 모든 데이터를 복사하며
얕은 복사는 primitive type 만 복사한다.

얕은 복사의 경우
포인터는 포인터 주소를 복사함으로 2중 delete가 발생할 수 있기에
포인터 사용시에는 new 이후 내용자체를 수작업으로 복사해야 한다.

[링크 : http://en.wikipedia.org/wiki/Object_copy]

'Programming > C++ STL' 카테고리의 다른 글

c++ explicit  (0) 2014.02.28
c++ class / const member variable & function  (0) 2014.02.28
crt0.o / crtexe.obj  (0) 2014.02.27
c++ constructor  (0) 2014.02.26
C++11 Lambda Fuction  (2) 2013.11.20
Posted by 구차니